这是数组
tagGroups: Array(6)
[
{name: "Function", tags: Array(1)}
{name: "Function", tags: Array(1)}
{name: "Function", tags: Array(1)}
{name: "Test", tags: Array(1)}
{name: "Test", tags: Array(1)}
{name: "new", tags: Array(1)}
]
我需要能够合并具有相同名称的对象的标签数组,这样我最终会得到以下结果
{
"name": "Tag Group 1",
"tags": [
"TagA",
"TagB",
"TagC"
]
},
这是我正确的代码,它创建了对象格式
// Creates the final format that can be upload or stored
for (var i = 0, l = tagGroupsArr.length; i < l; i++) {
tagGroupsTemp = {name: tagGroupsArr[i].tagGroupName, tags: [tagGroupsArr[i].tag]};
tagGroupsFinal.push(tagGroupsTemp);
}
最佳答案
您可以使用array#reduce
创建一个新对象,以对象名称作为键,以对象作为值。然后,如果新对象中已存在 name
,则可以concat
tags
数组。之后,您可以使用Object.values()
来获取合并后的标签对象。
const tagGroupes = [{name: "Function", tags: ["TagA"]},{name: "Function", tags: ["TagB"]},{name: "Function", tags: ["TagC"]},{name: "Test", tags: ["TestA"]},{name: "Test", tags: ["TestB"]},{name: "new", tags: ["newA"]}]
const result = tagGroupes.reduce((res, obj) => {
if(res[obj.name]){
res[obj.name].tags = res[obj.name].tags.concat(obj.tags);
} else {
res[obj.name] = obj;
}
return res;
},{});
console.log(Object.values(result));
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于Javascript合并具有相同对象名称的嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47194275/