#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);