При перемещении объекта в массив все значения одной конкретной переменной в объекте становятся одинаковыми

#javascript

#javascript

Вопрос:

Я создаю, помещая один и тот же объект 10 раз в массив, но каждый раз, когда он перемещается, он изменяет переменную внутри объекта на 1. Но когда цикл завершается, все переменные внутри всех объектов в конечном итоге получают 10 (одно и то же значение). Почему это происходит?

Пример:

 var obj = {}
var array = [];

for(var i = 0; i < 10; i  ){
    obj.number = i;
    array.push(obj);
}
 

Когда я затем
console.log(массив)

Он возвращает массив, но все объекты obj имеют одинаковый номер. Почему это происходит?

Комментарии:

1. вы постоянно обновляете один и тот же объект

2. переместить инициализацию объекта

Ответ №1:

Вы перемещаете объект в свой массив, что означает, что вы перемещаете ссылку на тот же объект; если вы где-то меняете свой объект, он будет изменен везде.

Вы можете либо :

Создавайте новый объект на каждой итерации :

 var array = [];

for(var i = 0; i < 10; i  ){
    var obj = {}
    obj.number = i;
    array.push(obj);
}

console.log(array); 

Или клонируйте объект, чтобы убедиться, что изменения не будут применены к ссылке

 var obj = {}
var array = [];

for(var i = 0; i < 10; i  ){
    let newObject = JSON.parse(JSON.stringify(obj))
    newObject.number = i;
    array.push(newObject);
}

console.log(array);