js实现分类
使用数组的 filter 方法分类
通过 filter 方法可以根据条件筛选数组元素,将符合条件和不符条件的元素分别归类。
示例代码:
const items = [1, 2, 3, 4, 5];
const even = items.filter(item => item % 2 === 0); // 分类为偶数
const odd = items.filter(item => item % 2 !== 0); // 分类为奇数
console.log(even); // [2, 4]
console.log(odd); // [1, 3, 5]
使用 reduce 方法实现多分类
reduce 方法适合将数组元素按多个类别分组,结果通常以对象形式存储。
示例代码:
const data = [
{ type: 'fruit', name: 'apple' },
{ type: 'vegetable', name: 'carrot' },
{ type: 'fruit', name: 'banana' }
];
const categories = data.reduce((acc, item) => {
if (!acc[item.type]) acc[item.type] = [];
acc[item.type].push(item.name);
return acc;
}, {});
console.log(categories); // { fruit: ['apple', 'banana'], vegetable: ['carrot'] }
基于 Map 的动态分类
Map 结构适合需要动态键名或复杂键值的分类场景。
示例代码:
const users = [
{ id: 1, role: 'admin' },
{ id: 2, role: 'user' },
{ id: 3, role: 'admin' }
];
const roleMap = new Map();
users.forEach(user => {
if (!roleMap.has(user.role)) roleMap.set(user.role, []);
roleMap.get(user.role).push(user.id);
});
console.log(Array.from(roleMap)); // [['admin', [1, 3]], ['user', [2]]]
使用 Set 去重后分类
若需先去除重复项再分类,可结合 Set 和数组方法。
示例代码:
const numbers = [1, 2, 2, 3, 4, 4];
const unique = [...new Set(numbers)];
const smallNumbers = unique.filter(n => n < 3);
const largeNumbers = unique.filter(n => n >= 3);
console.log(smallNumbers); // [1, 2]
console.log(largeNumbers); // [3, 4]
按条件分组的通用函数
封装一个可复用的分类函数,支持自定义条件逻辑。
示例代码:

function classify(array, classifierFn) {
return array.reduce((result, item) => {
const key = classifierFn(item);
(result[key] || (result[key] = [])).push(item);
return result;
}, {});
}
const numbers = [1, 2, 3, 4, 5];
const result = classify(numbers, n => n % 2 === 0 ? 'even' : 'odd');
console.log(result); // { odd: [1, 3, 5], even: [2, 4] }






