📅  最后修改于: 2023-12-03 15:02:47.364000             🧑  作者: Mango
在处理对象列表时,我们经常需要按照某个属性分组。而 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
函数可以很方便地对对象列表按照某个属性进行分组。但是默认情况下它会将空值也分到一个组中,这可能不符合我们的实际需求。通过自定义分组规则,我们可以很容易地排除空值,实现更精准的分组。