[英]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);
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.