【发布时间】:2017-05-21 19:50:07
【问题描述】:
我想要一个不可变的原始对象数组并扩展一个新数组,但似乎下面的代码没有产生正确的结果。 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"}]
【问题讨论】:
-
克隆数组并将
obj2指定为新副本的第二个元素。没有“漂亮”的方法可以做到这一点。var obj3 = obj1.slice(); obj3[1] = obj2;。我的意思是,你可以做var obj3 = Object.assign([], obj1, {1: obj2});但这似乎更神奇¯\_(ツ)_/¯ -
为什么要更新第二个对象?因为它有一个属性
def?您想根据属性匹配/合并对象吗?如果属性名称不同会怎样?obj2会简单地添加到数组中吗?对象会合并到不同的地方吗?如果数组中的两个对象具有相同的属性怎么办?如果他们也有其他属性怎么办?您实际上并没有描述合并规则是什么,因此您得到的任何答案都只是基于您提供的特定输入和输出的解释。
标签: javascript arrays immutable.js