📜  lodash group by except group null items - Javascript(1)

📅  最后修改于: 2023-12-03 15:02:47.364000             🧑  作者: Mango

Lodash groupBy - 排除空值的分组

介绍

在处理对象列表时,我们经常需要按照某个属性分组。而 lodash 库中的 groupBy 函数可以很方便地实现这个目标。但是默认情况下它会将空值也分到一个组中,这可能会影响后续的处理结果。因此,本文将介绍如何使用 groupBy 函数,并在此基础上排除空值。

代码示例

首先,我们来看一个简单的示例。假设我们有如下的数据:

const users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: null },
  { name: 'David', age: undefined },
  { name: 'Emily', age: '' },
];

现在我们想按照 age 属性分组,可以这样使用 groupBy 函数:

const groups = _.groupBy(users, 'age');

console.log(groups);
// Output:
// {
//   25: [{ name: 'Alice', age: 25 }],
//   30: [{ name: 'Bob', age: 30 }],
//   null: [{ name: 'Charlie', age: null }],
//   undefined: [{ name: 'David', age: undefined }],
//   '': [{ name: 'Emily', age: '' }]
// }

可以看到,groupBy 函数将空值也分到了一个组中。为了避免这个问题,我们需要自定义一个分组规则,针对空值特殊处理。

const filteredGroups = _.groupBy(users, (user) => {
  if (user.age === null || user.age === undefined || user.age === '') {
    return '__NULL__';
  } else {
    return user.age;
  }
});

console.log(filteredGroups);
// Output:
// {
//   25: [{ name: 'Alice', age: 25 }],
//   30: [{ name: 'Bob', age: 30 }],
//   __NULL__: [
//     { name: 'Charlie', age: null },
//     { name: 'David', age: undefined },
//     { name: 'Emily', age: '' }
//   ]
// }

在这个示例中,我们使用了一个匿名函数作为参数,该函数将每个用户对象转换为一个分组键。如果 age 属性为空值,我们将其转换为一个特殊的字符串 __NULL__,这样就可以让它们都被分到同一个组中了。

总结

使用 groupBy 函数可以很方便地对对象列表按照某个属性进行分组。但是默认情况下它会将空值也分到一个组中,这可能不符合我们的实际需求。通过自定义分组规则,我们可以很容易地排除空值,实现更精准的分组。