我想将几个对象合并在一起,但因为它们的键是相等的,所以在使用Object.assign()
时,它只返回与上一个相同的属性。
let obj1 = {0: "a", 1: "b", 2: "c", 3: "d"};
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"};
但是我想要的输出
let output = {0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f", 6: "g", 7: "h"};
发布于 2018-07-02 00:03:19
你真的应该使用数组来做这件事。这会让你的生活更轻松。
话虽如此,您可以从对象中获取values
,这将是数组,连接它们,然后使用以下命令创建一个新对象:
let obj1 = {0: "a", 1: "b", 2: "c", 3: "d"}
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"}
let obj = Object.values(obj1).concat(Object.values(obj2))
.reduce((a, c, i) => (a[i] = c, a), {})
console.log(obj)
您还可以对以下内容使用扩展语法:
let obj1 = {0: "a", 1: "b", 2: "c", 3: "d"}
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"}
let obj = {...Object.values(obj1).concat(Object.values(obj2))}
console.log(obj)
对于这样的情况,应该发生什么是不明确的:
let obj1 = {0: "a", 1: "b", 2: "c", 4: "d"}
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"}
发布于 2018-07-02 00:09:39
您可以通过连接所有值来连接任意数量的对象,并将它们分配回一个对象。
let obj1 = { 0: "a", 1: "b", 2: "c", 3: "d" },
obj2 = { 0: "e", 1: "f", 2: "g", 3: "h" },
merged = Object.assign({}, [obj1, obj2].reduce((r, o) => r.concat(Object.values(o)), []));
console.log(merged);
发布于 2018-07-02 00:05:02
创建一个对象数组,使用reduce method.Pass,一个空对象作为thisArg
,并保留一个将增加的index
,这个index
将充当一个key.Inside,reduce方法使用Object.values
,它将给一个数组提供当前对象的所有值,如[a,b,c,d]
。现在迭代此数组并更新最初传递的空白对象
let obj1 = {
0: "a",
1: "b",
2: "c",
3: "d"
};
let obj2 = {
0: "e",
1: "f",
2: "g",
3: "h"
};
let comObj = [obj1, obj2]
let index = 0;
let mrgObj = comObj.reduce(function(acc, curr) {
let getVals = Object.values(curr);
getVals.forEach(function(item, currIndex) {
acc[index] = item
index++;
})
return acc;
}, {});
console.log(mrgObj)
https://stackoverflow.com/questions/51124812
复制相似问题