如何在 javascript 中不使用 loadsh 对数据进行 '集合'

原文地址: How to groupBy in JavaScript
对数据进行分组是js中一个基本用法, 所以我们没必要使用lodash
例如: 我们希望通过以下数组结构返回出一个类似下面示例的数据结构

const users = [
  { name: 'Jim', color: 'blue' },
  { name: 'Sam', color: 'blue' },
  { name: 'Eddie', color: 'green' },
];
 
const usersByColor = // TODO:  数组集合
 
console.log(usersByColor);
 
// 根据上面的 `users` 数据结构,我希望返回的数据是这个格式的: 
// {
//   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;
}, {});

然后在每一循环中都查看对象中有没有 以 value.color 值为键名的元素,如果没有则新建且值为 [];
如果已经有了的话则把整个对象赋值给 acc[value.color]

你可能感兴趣的:(如何在 javascript 中不使用 loadsh 对数据进行 '集合')