簡體   English   中英

如何在一個鍵下對 JSON 數組中的所有對象的鍵下存在的值進行分組?

[英]How do I group values present under a key in all objects in an array of JSON, under a single key?

我有一個 JSON 數組,例如:

[
   {user_id:1, name: "Person A", project: "Project A"},
   {user_id:1, name: "Person A", project: "Project B"},
   {user_id:2, name: "Person B", project: "Project A"},
   {user_id:2, name: "Person B", project: "Project C"},
   {user_id:3, name: "Person C", project: "Project D"}
]

我想轉換這個數組,使得一個人只有一個條目,並且它有一個值為active_projects的數組,或者他所有的項目。 基本上我想刪除這個數組中的冗余。 output 將是:

[
   {user_id:1, name: "Person A", active_projects: ["Project A","Project B"] },
   {user_id:2, name: "Person B", active_projects: ["Project A","Project C"] },
   {user_id:3, name: "Person C", active_projects: ["Project D"] }
]

什么是最干凈和最好的方法?

一個簡單的解決方案是首先使用reduce計算 user_ids 的 map。 然后只需使用Object.values將其轉換為數組。

 const lkp = data.reduce((acc, {user_id, name, project}) => { acc[user_id] = acc[user_id] || {}; acc[user_id].user_id = user_id; acc[user_id][name] = name; acc[user_id].active_projects = acc[user_id].active_projects || []; acc[user_id].active_projects.push(project); return acc; }, {}) const arr = Object.values(lkp) console.log(arr)
 <script> var data = [ {user_id:1, name: "Person A", project: "Project A"}, {user_id:1, name: "Person A", project: "Project B"}, {user_id:2, name: "Person B", project: "Project A"}, {user_id:2, name: "Person B", project: "Project C"}, {user_id:3, name: "Person C", project: "Project D"} ]; </script>

您可以嘗試reduce JavaScript 的方法。

 var data =[ {user_id:1, name: "Person A", project: "Project A"}, {user_id:1, name: "Person A", project: "Project B"}, {user_id:2, name: "Person B", project: "Project A"}, {user_id:2, name: "Person B", project: "Project C"}, {user_id:3, name: "Person C", project: "Project D"}]; result = Object.values(data.reduce((acc, {user_id, project, ...rest})=>{ acc[user_id] = acc[user_id] || { user_id, ...rest }; acc[user_id].activeProject = acc[user_id].activeProject || []; acc[user_id].activeProject.push(project); return acc; },{})); console.log(result);

暫無
暫無

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

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