簡體   English   中英

如何獲取數組中的重復對象?

[英]How to get the duplicates objects in an array?

我有一個這樣的數組:

    var clients=[{"id":1,"name":"john","age":20},
{"id":3,"name":"dean","age":23},
{"id":12,"name":"harry","age":14},
{"id":1,"name":"sam","age":22},
{"id":13,"name":"Bolivia","age":16},
{"id":7,"name":"sabi","age":60},
{"id":7,"name":"sahra","age":40},
{"id":4,"name":"natie","age":53},{"id":7,"name":"many","age":22}]

我想找到重復的對象並將它們聚集成這樣:

 [
       {
       "id":1,
        "clients":[
                    {"id":1,"name":"john","age":20},
                    {"id":1,"name":"sam","age":22}
                   ]
       },
     {
       "id":7,
       "clients":[
                   {"id":7,"name":"sabi","age":60},
                   {"id":7,"name":"sahra","age":40},
                   {"id":7,"name":"many","age":22}
                  ]
      }
    ]

我可以像這樣使用 filter() 來做到這一點: clients.filter(//code hier)嗎?

reduce()就是為此量身定做的。 當你想對一個數組進行聚合並得到一個計算結果時,你應該使用reduce()

find()是另一種數組方法,它有助於根據條件查找數組元素(這里是 id 屬性的匹配)。

 var clients=[{"id":1,"name":"john","age":20}, {"id":3,"name":"dean","age":23}, {"id":12,"name":"harry","age":14}, {"id":1,"name":"sam","age":22}, {"id":13,"name":"Bolivia","age":16}, {"id":7,"name":"sabi","age":60}, {"id":7,"name":"sahra","age":40}, {"id":4,"name":"natie","age":53},{"id":7,"name":"many","age":22}] let ans = clients.reduce((agg,x,index) => { let findI = agg.find( a => a.id === x.id ); if(findI) findI.clients.push(x); else { agg.push({ id: x.id, clients: [x] }); } return agg; },[]); console.log(ans);

最簡單的解決方案是遍歷clients並檢查具有相同id的現有 object 。 如果是,則推送到clients數組。 否則,只需創建一個。

 var clients = [{ "id": 1, "name": "john", "age": 20 }, { "id": 3, "name": "dean", "age": 23 }, { "id": 12, "name": "harry", "age": 14 }, { "id": 1, "name": "sam", "age": 22 }, { "id": 13, "name": "olivia", "age": 16 }, { "id": 7, "name": "sabi", "age": 60 }, { "id": 7, "name": "sahra", "age": 40 }, { "id": 4, "name": "natie", "age": 53 }, { "id": 7, "name": "kany", "age": 22 }] const groups = []; for (let client of clients) { const existingGroup = groups.find(group => group.id == client.id) if (existingGroup) existingGroup.clients.push(client); else { groups.push({ id: client.id, clients: [client] }); } } console.log(groups);

您可以使用剛剛用於此目的的臨時 object 重新分配原始 object,並繼續您的業務邏輯,我相信這是您正在尋找的。

暫無
暫無

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

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