首页 > 解决方案 > 如何组合具有相同属性的 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/ 这是预期的结构:

在此处输入图像描述 我希望 o/p 是:

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" }

但他们都没有给我这两个对象。我不想替换另一个。有没有办法做到这一点?

谢谢!

标签: javascript

解决方案


你所描述的看起来更像是一个数组而不是一个对象。但是如果你想要一个带有数字键的对象,你可以这样做:

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)


推荐阅读