对象赋值扩展不可变对象数组

时间:2017-01-06 23:30:03

标签: javascript arrays immutable.js

我想拥有一个不可变的原始对象数组并扩展一个新数组,但似乎下面的代码没有产生正确的结果。 obj3成为一个对象而不是一个对象数组。我甚至试过了lodash的延伸。

var obj1 = [{
  abc: 'abc value'
}, {
  def: 'def value'
}];

var obj2 = {
  def: 'new def value'
};

/*var obj3 = _.extend({}, obj1, obj2);
console.log(obj3)
*/

var obj3 = Object.assign({},obj1,obj2);

https://jsbin.com/bawadeqicu/edit?html,js,output

我的愿望输出是

obj1: [{"abc":"abc value"},{"def":"def value"}] // immutable
obj3: [{"abc":"abc value"},{"def":"new def value"}]

2 个答案:

答案 0 :(得分:2)

您可以使用传递给Object.entries()的{​​{1}}参数的.map()obj1点差元素将Object.assign()数组的对象元素传播到新数组。

obj1

答案 1 :(得分:1)

走向永恒

不是传递对象并改变它,我们最好创建一个全新的对象:

const person = {
  name: 'John',
  age: 28
}
const newPerson = Object.assign({}, person, {
  age: 30
})
console.log(newPerson === person) // false
console.log(person) // { name: 'John', age: 28 }
console.log(newPerson) // { name: 'John', age: 30 }

source