簡體   English   中英

使用map方法對數組進行分組

[英]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 值為既有屬性,也可以是一個新的idid的屬性,其余屬性均為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.

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