【发布时间】:2016-11-24 07:33:12
【问题描述】:
我有以下 2 个 JavaScript 对象:
let o1 = {
entities: {
1: {
text: "fooo",
nested: {
ids: [1, 2, 3],
flag: true
}
}
}
};
let o2 = {
ids: [4, 5, 6]
}
我想合并它们而不改变它们,得到一个如下所示的对象:
let o3 = {
entities: {
1: {
text: "fooo",
nested: {
ids: [1, 2, 3, 4, 5, 6],
flag: true
}
}
}
};
可能有 n 个entities,但只有entityId 定义的那个应该受到影响。
我尝试了什么:
let entityId = 1;
let o3 = Object.assign({}, o1, {
entities: Object.assign({}, o1.entities, {
[entityId]: Object.assign({}, o1.entities[entityId].nested,
{ ids: [...o1.entities[entityId].nested.ids, ...o2.ids] }
)
})
});
问题是text: "fooo",nested: 完全消失了。
我的方法对吗?这段代码可以优化吗?
【问题讨论】:
-
"获取如下所示的对象:" - 您忘记包含示例输出。您是否正在为与
o1相同的结构进行拍摄,但在数组中添加了额外的 id? -
对不起,我改了。没错
-
您的示例输入有一个
entities(复数)属性,但只有一个1属性。真实数据是否有2、3等,如果有,o2的id应该与哪个合并? -
这个例子可以有更多的
entities,只有变量entityId中的一组应该受到影响。 -
将
o1合并到o3然后将项目推入o3数组?虽然对于实际用例来说可能太简单了,但是像这样链接assign根本不可读,恕我直言
标签: javascript ecmascript-6 redux