簡體   English   中英

根據屬性合並數組中的對象

[英]Merge objects in array based on property

我有一個這樣的數組,我正在嘗試合並,因此具有name屬性的任何對象在合並之后都會包含合並對象的列表

var array = [ 
    {name: "One",
     myList: [Object1, Object2]
    },
    {name: "Two",
     myList: [Object3, Object4]
     },
     {name: "One",
     myList: [Object5, Object6]
     }
]

我如何合並兩個“一個”對象,以便得到類似

var array = [ 
    {name: "One",
     myList: [Object1, Object2, Object5, Object6]
    },
    {name: "Two",
     myList: [Object3, Object4]
     }
]

希望在香草javascript中做到這一點

使用reduce

var merged = array.reduce(function(list, obj) {
    var found = false;
    for (var i = 0; i < list.length; i++) {
        if (list[i].name == obj.name) {
            list[i].myList = list[i].myList.concat(obj.myList);
            found = true;
            break;
        }
    }

    if (!found) {
        list.push(obj);
    }

    return list;
}, []);

首先,您可以刪除重復的條目並組織myList數組中的對象。 然后,根據第一步中的排序對象,返回帶有指定鍵的對象數組。

 var array = [{name:"One",myList:['Object1','Object2']},{name:"Two",myList:['Object3','Object4']},{name:"One",myList:['Object5','Object6']}], obj = {}; array.forEach(function(v) { obj[v.name] = (obj[v.name] || []).concat(v.myList) }); var arr = Object.keys(obj).reduce(function(s,a) { s.push({name: a, myList: obj[a]}); return s; }, []); console.log(arr); 

使用Lodash另一種方法是只進行減少

var array = [
    { name: "One", myList: ["Object1", "Object2"] },
    { name: "Two", myList: ["Object3", "Object4"] },
    { name: "One", myList: ["Object5", "Object6"] }
  ];

  const newArray = _.chain(array)
    .reduce((acc, currentValue) => {
      acc[currentValue.name] = (acc[currentValue.name] || []).concat(
        currentValue.myList
      );
      return acc;
    }, {})
    .reduce((acc, currentValue, key) => {
      acc.push({ name: key, myList: currentValue }); 
      return acc;
    }, [])
    .value();

  console.log(newArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM