封装通用函数
示例
封装一个函数,可以对一个数组数据进行分组
const people = [
{ name: "John", age: 20, gender: "male" },
{ name: "Jane", age: 21, gender: "female" },
{ name: "Jim", age: 14, gender: "male" },
{ name: "Jill", age: 16, gender: "female" },
];
基本实现
const groupBy = (arr, key) => {
return arr.reduce((acc, item) => {
const groupKey = item[key];
if (!acc[groupKey]) {
acc[groupKey] = [];
}
acc[groupKey].push(item);
}, {});
};
在这里我们做了几个假设:1. 假设数组中的数据是对象,2. 假设对象中有一个属性,这个属性可以作为分组的依据
优化
const groupBy = (arr, generateKey) => {
if (typeof generateKey === "string") {
const propName = generateKey;
generateKey = (item) => item[propName];
}
return arr.reduce((acc, item) => {
const groupKey = generateKey(item);
if (!acc[groupKey]) {
acc[groupKey] = [];
}
acc[groupKey].push(item);
}, {});
};
// 按性别分组
groupBy(people, "gender");
// 按年龄分组
groupBy(people, (item) => item.age);
// 按年龄分组,并返回年龄大于 18 的
groupBy(people, (item) => (item.age > 18 ? "adult" : "child"));
新的优化方案,将生成 key 的逻辑抽离出来,让用户可以自定义生成 key 的逻辑