我有一个具有以下结构的对象:
mymain = {
name1: [ {key1: number, key2: "string"},{key1: number, key2: "string"} ],
name2: [ {key1: number, key2: "string"},{key1: number, key2: "string"} ],
name3: [ {key1: number, key2: "string"},{key1: number, key2: "string"} ]
}
顶级项目(名称1,名称2,名称3)的数量和键名称将有所不同。
我想将这些名称下的所有对象(数量和值也可变,但都具有相同的键结构)合并为一个大对象,该对象看起来像这样:
Allconcat = [{key1: number, key2: "string"},{key1: number, key2: "string"},{key1: number, key2: "string"},{key1: number, key2: "string"},{key1: number, key2: "string"},{key1: number, key2: "string"}]
我尝试提取顶级项目的名称,然后将它们循环以连接对象,但这给出了错误的项目数:
var names = Object.keys(mymain)
var firstname = names[0]
names.shift() // should remove first item
var firstObj = mymain[firstname] // name1 object
var Allconcat
console.log(firstObj) // correctly shows name1 with 2 keys
for (var r = 0, rlen = names.length; r < rlen; r++) {
Allconcat = firstObj.concat(mymain[names[r]])
}
console.log(Allconcat) // shows 4 objects, missing 2 in the middle, first and last are there
转移或不转移没有什么区别,我总是以中间缺少一些元素为最终结果。
最佳答案
一种选择是采用Object.values
对象的mymain
并展平数组:
const mymain = {
name1: [ {key1: 'number', key2: "string"},{key1: 'number', key2: "string"} ],
name2: [ {key1: 'number', key2: "string"},{key1: 'number', key2: "string"} ],
name3: [ {key1: 'number', key2: "string"},{key1: 'number', key2: "string"} ]
};
const Allconcat = Object.values(mymain).flat();
console.log(Allconcat);
或者,如果您不能使用
.flat()
,则传播到concat中:const mymain = {
name1: [ {key1: 'number', key2: "string"},{key1: 'number', key2: "string"} ],
name2: [ {key1: 'number', key2: "string"},{key1: 'number', key2: "string"} ],
name3: [ {key1: 'number', key2: "string"},{key1: 'number', key2: "string"} ]
};
const Allconcat = [].concat(...Object.values(mymain));
console.log(Allconcat);