Javascript合并具有相同对象名称的嵌套数组?

标签 javascript

我有以下数组对象 enter image description here

这是数组

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/

相关文章:

javascript - 在react.js中通过点击增加数量

javascript - 如何将变量传递给 iframe src url

javascript - 下拉菜单无法通过 CSS 或 Javascript 工作?

javascript - 分层json数据的正确显示

javascript - 附加元素的 JQuery 悬停状态

javascript - 如何修复未捕获的类型错误 : Cannot read property 'href' of null

javascript - 重叠 div 的点击

javascript - 动态显示一个分区取决于另一个分区的滚动条位置

javascript - 从 ReactJS 状态设置文本区域滚动

javascript - 使用坐标以编程方式旋转形状