Javascript 合并数组中具有相同属性值的对象

Javascript 合并数组中具有相同属性值的对象,javascript,arrays,json,object,array-merge,Javascript,Arrays,Json,Object,Array Merge,我有一个对象数组。我想合并数组中具有相同“标签”属性的对象。通过粘贴下面的代码,我可以合并,但是合并是在所有对象数组中进行的,而不是在一个数组中进行的 var pages= [ { name: "page1", list:{ fields:[ {name: "sHist", label: "Range", type: "long", searchable: false}, {n

我有一个对象数组。我想合并数组中具有相同“标签”属性的对象。通过粘贴下面的代码,我可以合并,但是合并是在所有对象数组中进行的,而不是在一个数组中进行的

var pages= [
    {
         name: "page1", 
         list:{
           fields:[
             {name: "sHist", label: "Range", type: "long", searchable: false},
             {name: "sFuture", label: "Range", type: "long", searchable: false},
             {name: "ordersinPage1", label: "Orders", type: "long", searchable: false}
           ]
          }
    },
    {
         name: "page2", 
         list:{
           fields:[
             {name: "needs", label: "Needs", type: "long", searchable: false},
             {name: "fulfil", label: "Fulfill", type: "long", searchable: false},
             {name: "ordersinPage2", label: "Orders", type: "long", searchable: false}
           ]
          }
    }

  ]
我尝试的代码如下:

 let seen={};var totalFieldsObject ;
 pages.map((graphPage) => {
  totalFieldsObject = graphPage.list.fields.filter((entry) => {
      if (seen.hasOwnProperty(entry.label)) {
        let previous;
        previous = seen[entry.label];
        previous.name.push(entry.name);
        return false;
      }
      if (!Array.isArray(entry.name)) {
        entry.name = [entry.name];
      }
      seen[entry.label] = entry;
      return true;
    });
    });
  console.log(pages)
预期产出:

var exprectedOutput=[
    {
         name: "page1", 
         list:{
           fields:[
             {name: ["sHist","sFuture"], label: "Range", type: "long", searchable: false}, 
             {name: ["ordersinPage1"], label: "Orders", type: "long", searchable: false}
           ]
          }
    },
    {
         name: "page2", 
         list:{
           fields:[
             {name: ["needs"], label: "Needs", type: "long", searchable: false},
             {name: ["fulfil"], label: "Fulfill", type: "long", searchable: false},
             {name: ["ordersinPage2"], label: "Orders", type: "long", searchable: false}
           ]
          }
    },

  ]
您需要将具有相同标签的对象分组:

变量页=[{ 姓名:第1页, 名单:{ 字段:[{ 姓名:希斯特, 标签:范围, 类型:长, 可搜索:false }, { 姓名:sFuture,, 标签:范围, 类型:长, 可搜索:false }, { 名称:订单第1页, 标签:订单, 类型:长, 可搜索:false } ] } }, { 姓名:第2页, 名单:{ 字段:[{ 名称:需求, 标签:需求, 类型:长, 可搜索:false }, { 姓名:履行, 标签:履行, 类型:长, 可搜索:false }, { 名称:订单第2页, 标签:订单, 类型:长, 可搜索:false } ] } } ] const result=pages.mappage=> page.list.fields.reduceall,curr=>{ const ndx=all.findIndexe=>e.label==curr.label;//在列表中查找当前元素 如果ndx>-1{ //如果找到,请在数组中指定名称 //array.flat将此:[[a],b]转换为:[a,b] all[ndx].name=[all[ndx].name,curr.name].flat; }否则{ //否则,请编辑name属性,使其成为数组并将其推送。 all.push{…curr,name:[curr.name]} } 全部归还; }, [] console.logresult您需要使用相同的标签对对象进行分组:

变量页=[{ 姓名:第1页, 名单:{ 字段:[{ 姓名:希斯特, 标签:范围, 类型:长, 可搜索:false }, { 姓名:sFuture,, 标签:范围, 类型:长, 可搜索:false }, { 名称:订单第1页, 标签:订单, 类型:长, 可搜索:false } ] } }, { 姓名:第2页, 名单:{ 字段:[{ 名称:需求, 标签:需求, 类型:长, 可搜索:false }, { 姓名:履行, 标签:履行, 类型:长, 可搜索:false }, { 名称:订单第2页, 标签:订单, 类型:长, 可搜索:false } ] } } ] const result=pages.mappage=> page.list.fields.reduceall,curr=>{ const ndx=all.findIndexe=>e.label==curr.label;//在列表中查找当前元素 如果ndx>-1{ //如果找到,请在数组中指定名称 //array.flat将此:[[a],b]转换为:[a,b] all[ndx].name=[all[ndx].name,curr.name].flat; }否则{ //否则,请编辑name属性,使其成为数组并将其推送。 all.push{…curr,name:[curr.name]} } 全部归还; }, []
console.logresult谢谢。即使分组不存在,name属性也应为数组。为您更新了预期的输出。即使分组不存在,name属性也应为数组。更新了预期输出