基于关键字javascript组合2个数组

Combine 2 arrays based on key javascript

本文关键字:2个 数组 组合 javascript 关键字      更新时间:2023-09-26

我正在尝试基于键"parent_id"组合两个数组。以下是阵列和所需输出:

数组1:项目组:

var itemGroups = [
  {
    "id":1,
    "value":"Item Group 1",
    "order":1
  },
  {
    "id":4,
    "value":"Item Group 2",
    "order":2
  }, 
  {
    "id":12,
    "value":"Item Group 3",
    "order":4
  }
];

数组2:分组中的项目:

var itemChildren = [
  {
    "id":68,
    "value":"An example item from Group 1",
    "parent_id":1
  },
  {
    "id":69,
    "value":"An example item from Group 2",
    "parent_id":4
  }
  {
    "id":76,
    "value":"An example item from Group 3",
    "parent_id":12
  }
];

所需输出:

var itemGroupsWithChildren = [
  {
    "id":1,
    "value":"Item Group 1",
    "order":1,
    "children":[
      {
        "id":68,
         "value":"An example item from Group 1",
      }     
    ]
  },
  {
    "id":4,
    "value":"Item Group 2",
    "order":2,
    "children":[
      {
        "id":69,
        "value":"An example item from Group 2"
      }     
    ]
  }, 
  {
    "id":12,
    "value":"Item Group 3",
    "order":4,
    "children":[
      {
        "id":76,
        "value":"An example item from Group 3"
      }     
    ]
  }
];

如有任何帮助,我们将不胜感激。谢谢

编辑:

var dataServiceGroups = [
  {"id":65,"value":"Group 1","order":1,"picklist_id":12},
  {"id":118,"value":"Group 2","order":2,"picklist_id":12},
  {"id":120,"value":"Group 2","order":4,"picklist_id":12},
  {"id":222,"value":"Group 3","order":3,"picklist_id":12},
  {"id":223,"value":"Group 4","order":5,"picklist_id":12},
  {"id":224,"value":"Group 5","order":6,"picklist_id":12},
  {"id":225,"value":"Group 6","order":7,"picklist_id":12},
  {"id":226,"value":"Group 7","order":8,"picklist_id":12},
  {"id":227,"value":"Other Group","order":9,"picklist_id":12}
];
var dataServices = [
  {"id":68,"value":"Item From Group 1","order":3,"picklist_id":13,"parent_id":65},
  {"id":228,"value":"Other Service","order":4,"picklist_id":13,"parent_id":227}
];

我建议您将数组2转换为一个对象,这样您就可以很容易地在其中找到东西,然后使用它将数组1映射到您想要的结果。

看看下面的

var itemC = {}
itemChildren.forEach(function(child) {
  var tmp = {};
  tmp['id'] = child.id;
  tmp['value'] = child.value;
  itemC[child.parent_id] = tmp
});
  
var desiredOutput = itemGroups.map(function(item) {
  item[children] = itemC[item.id];
  return item;
})

它看起来像这个

itemGroups.map(function(object, index) {
    object["children"] = itemChildren[index];
});

为子对象创建分组数组,然后将对象添加到组中:

var groupedChildren = [];
itemChildren.forEach(function(item) {
   var parentID = item.parent_id;      
   //Create the array for the group by parent id
   if(typeof groupedChildren[parentID] == "undefined") {
      groupedChildren[parentID] = [];
   }
   groupedChildren[parentID].push(item);
});
//Now add the grouped children to itemGroups
var itemGroupsWithChildren = itemGroups.map(function(group) {
  group['children'] = groupedChildren[group.id] || []; //put empty array if no children
  return group;
});