Я пытаюсь изменить поле в массиве. Я использовал функцию find
, чтобы получить объект, а затем использовал Object.assign
, чтобы перезаписать значение из массива.Как работает Object.assign?
Однако в одном случае это работает:
Object.assign(item2, {id:3, name: "Do"});
и в другом случае, это не делает:
item = Object.assign({}, {id:3, name: "Do"});
Что изменилось за эти два случая?
let arr = [{id:1, name:"John"}, {id:2, name: "Doe"}];
let item = arr.find((x)=> x.id === 2);
//the array is not changed!
item = Object.assign({}, {id:3, name: "Do"});
console.log(arr);
let item2 = arr.find((x)=> x.id === 2);
//the array is changed!
Object.assign(item2, {id:3, name: "Do"});
console.log(arr);
Источник: http://jsbin.com/mametudemo/1/edit?html,js,console
Вы переписываете 'item', когда вы делаете' item = Object ... 'поэтому' item' больше не является частью массива. – dfsq
В документах - метод Object.assign() используется для копирования значений всех перечислимых собственных свойств из одного или нескольких исходных объектов в целевой объект. Он вернет целевой объект. - Наверное, это не совсем понятно, потому что он говорит, что возвращает целевой объект, а не исходную ссылку. –