javascript - 如何组合具有相同属性的 2 个对象-Javascript
问题描述
我希望能够合并两个定义了相同属性/键的 JavaScript 对象。只是这些值不重复。例如我想:
var obj1 = {
0:{id: 33, name: 'abc', date: "12/12/12", type:"11" },
1: {id: 33, name: 'abc3', date: "12/13/12", type:"131"}
}
var obj2 = {
0:{id: 22, name: 'abc1', date: "12/1/13", type: "33" }
1:{id: 4, name: 'abc4', date: "12/4/12", type:"14"}
}
这是小提琴: http: //jsfiddle.net/q9c8k2yh/ 这是预期的结构:
var obj3 = {
0: { id: 33, name: 'abc', date: "12/12/12", type:"11" },
1: { id: 22, name: 'abc1', date: "12/1/13", type: "33" }
}
我在网上查了资料,得到的最常见的答案是:
Object.assign(obj2, obj1);
我试过了:
obj3 = Object.assign(obj2, obj1);//returns { id: 33, name: 'abc', date: "12/12/12", type:"11" }
obj3 = Object.assign(obj1, obj2);//return { id: 22, name: 'abc1', date: "12/1/13", type: "33" }
obj3 = Object.assign({},obj2, obj1); //return { id: 33, name: 'abc', date: "12/12/12", type:"11" }
但他们都没有给我这两个对象。我不想替换另一个。有没有办法做到这一点?
谢谢!
解决方案
你所描述的看起来更像是一个数组而不是一个对象。但是如果你想要一个带有数字键的对象,你可以这样做:
var obj1 = { id: 33, name: 'abc', date: "12/12/12", type:"11" }
var obj2 = { id: 22, name: 'abc1', date: "12/1/13", type: "33" }
let arr = [obj1, obj2]
// turn array into object:
let obj_all = {...arr}
console.log(obj_all)
新对象将保存对旧对象的引用。目前尚不清楚这是否是您所追求的,或者您是否想要克隆。
要制作克隆,您当然可以传播对象:
var obj1 = { id: 33, name: 'abc', date: "12/12/12", type:"11" }
var obj2 = { id: 22, name: 'abc1', date: "12/1/13", type: "33" }
let arr = [{...obj1}, {...obj2}]
let obj_all = {...arr}
// changes in original objects have no effect on clones
obj1.id="New Value"
console.log(obj_all)
推荐阅读
- python - Python JSON 序列化字典
- javascript - 有人能解释一下为什么我们在 javaScript 中的条件周围使用括号吗
- java - 如何解析结果集的 .equals 函数的值?
- jquery - 有没有办法我可以干掉这段代码或使用更好的方法来实现这种切换效果
- reactjs - 在 React 中找不到模块 TS2307
- visual-studio-code - 如何使 VS Code 的“向上移动”(或向下)功能自动应用适当的缩进,如 Atom?
- c# - 如何将自定义按钮添加到 Outlook?
- google-maps - 如何获取原始交通流量数据
- excel - 如何在 VBA 中使用公式
- java - 在第二个活动中分别收集和显示动态editTexts的值