[英]Grouping array with map method
我想按其鍵對對象數組進行分組,
原始表格;
data = [
{'id': 1, 'name': 'karthik'},
{'id': 1, 'age': 31},
{'id': 2, 'name': 'ramesh'},
{'id': 2, 'age': 22}
];
要轉變成
groupedData = [
{'id': 1, 'name': 'karthik', 'age': 31},
{'id': 2, 'name': 'ramesh', 'age': 22}
];
我嘗試過的
this.data.map(item => item.id)
.filter((item, index, all) => all.indexOf(item) === index);
console.log(this.data);
使用reduce
而不是map
。
const groupedData = Object.values(this.data.reduce((a, { id, ...r }) => ({ ...a, [id]: { ...(a[id] || { id }), ...r }}), {}));
工作原理:
首先,使用reduce
比任何map
解決方案都容易得多,因為它允許我們獲得一個累加器值a
。
然后,我們提取的id
,和r
性能的EST(因為我們不知道他們叫什么)。
我們返回a
,其鍵控屬性的id
值為既有屬性,也可以是一個新的id
為id
的屬性,其余屬性均為key。
您可以使用reduce
為每個id創建一個對象(一個表)。
const groupMap = data.reduce((group, currentData) => {
const id = currentData['id']
group[id] = { ...(group[id] || {}), ...currentData }
return group
} ,{})
返回的內容類似於:
{
"1": {
"id": 1,
"name": "karthik",
"age": 31
},
"2": {
"id": 2,
"name": "ramesh",
"age": 22
}
}
group[id] = { ...(group[id] || {}), ...currentData }
基本上是“如果您已經看到此ID,只需將先前的數據與當前數據合並”
然后可以得到最終結果,調用Object.values
const groupedData = Object.values(groupMap)
它只是獲取上面創建的對象的值。
嘗試這個
data = data.reduce((total, current, index) => {
for(let key in current) total[index][key] = current[key]
return total
}, [])
此功能將為您提供幫助)
function mergeobj(arrofobj) {
arrofobj.map((item, index) => {
for (let i = 0; i < arrofobj.length; i++) {
if(i==index)continue;
if (item['id'] == arrofobj[i]['id']) {
item = Object.assign(item, arrofobj[i]);
arrofobj.splice(i, 1);
--i;
}
}
return item;
})
return arrofobj; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.