如何在 javascript 中不使用 loadsh 對數(shù)據(jù)進行 '集合'

原文地址: How to groupBy in JavaScript
對數(shù)據(jù)進行分組是js中一個基本用法, 所以我們沒必要使用lodash
例如: 我們希望通過以下數(shù)組結(jié)構(gòu)返回出一個類似下面示例的數(shù)據(jù)結(jié)構(gòu)

const users = [
  { name: 'Jim', color: 'blue' },
  { name: 'Sam', color: 'blue' },
  { name: 'Eddie', color: 'green' },
];
 
const usersByColor = // TODO:  數(shù)組集合
 
console.log(usersByColor);
 
// 根據(jù)上面的 `users` 數(shù)據(jù)結(jié)構(gòu),我希望返回的數(shù)據(jù)是這個格式的: 
// {
//   blue: [{
//     { name: 'Jim', color: 'blue' },
//     { name: 'Sam', color: 'blue' },
//   }],
//   green: [{ name: 'Eddie', color: 'green' }]
// }

我門可以使用 js 中的 reduce 來做處理

const result = users.reduce((acc, value) => {
    console.log('-----', acc,value)
    return acc
},{})


我們先會使用{}作為 acc 然后 在對 users 的每一個 item 做處理;

const usersByColor = users.reduce((acc, value) => {
  if (!acc[value.color]) {
    acc[value.color] = [];
  }
 
  // TODO: implement grouping
  acc[value.color].push(value);

  return acc;
}, {});

然后在每一循環(huán)中都查看對象中有沒有 以 value.color 值為鍵名的元素,如果沒有則新建且值為 [];
如果已經(jīng)有了的話則把整個對象賦值給 acc[value.color]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容