groupBy 函数
const customGroupBy = (data, key) => {
return data.reduce((acc, cur) => {
const name = cur[key];
if (!acc[name]) {
acc[name] = [];
}
acc[name].push(cur);
return acc;
}, {});
}
const customGroupBy = (data, generateKey) => {
return data.reduce((acc, cur) => {
const name = generateKey(cur);
if (!acc[name]) {
acc[name] = [];
}
acc[name].push(cur);
return acc;
}, {});
}
const customGroupBy = (data, generateKey) => {
return data.reduce((acc, cur) => {
const groupKey = typeof generateKey === 'function' ? generateKey(cur) : cur[generateKey];
if (!acc[groupKey]) {
acc[groupKey] = [];
}
acc[groupKey].push(cur);
return acc;
}, {});
};
const data = [
{ id: 1, name: 'John', age: 25 },
{ id: 2, name: 'Jane', age: 30 },
{ id: 3, name: 'John', age: 27 },
{ id: 4, name: 'Jane', age: 24 },
{ id: 5, name: 'Jane', age: 24 }
];
/ const groupedData = customGroupBy(data, 'name')
const groupedData = customGroupBy(data, (item) => item.name + item.age);
console.log(groupedData)
countBy函数
const customCountBy = (data, generateKey) => {
return data.reduce((acc, cur) => {
const groupKey = typeof generateKey === 'function'
? generateKey(cur)
: typeof cur === 'string'
? cur
: cur[generateKey];
const count = acc[groupKey] ?? 0
return {
...acc,
[groupKey]: count + 1
}
}, {});
}
const data = [
{ id: 1, name: 'John', age: 25 },
{ id: 2, name: 'Jane', age: 30 },
{ id: 3, name: 'John', age: 27 },
{ id: 4, name: 'Jane', age: 24 },
{ id: 5, name: 'Jane', age: 24 }
];
const countedData = customCountBy(data, 'name')
console.log(countedData)