js 数组分组

js 数组分组

在 JavaScript 中,数组分组(即将数组中的元素按照某个规则分成多个子数组)是一个常见的任务。你可以使用多种方法来实现数组分组,例如使用 reduce、forEach 或其他数组方法。以下是一些常见的分组方法示例:

方法一:使用 reduce 方法

reduce 方法可以将数组元素归纳到一个累积器中,从而生成一个新的数组。这是进行数组分组时非常有用的工具。

const items = [ { category: 'fruit', name: 'apple' }, { category: 'fruit', name: 'banana' }, { category: 'vegetable', name: 'carrot' }, { category: 'fruit', name: 'cherry' }, { category: 'vegetable', name: 'spinach' } ]; const groupedByCategory = items.reduce((accumulator, item) => { if (!accumulator[item.category]) { accumulator[item.category] = []; } accumulator[item.category].push(item); return accumulator; }, {}); console.log(groupedByCategory);

输出:

{ fruit: [ { category: 'fruit', name: 'apple' }, { category: 'fruit', name: 'banana' }, { category: 'fruit', name: 'cherry' } ], vegetable: [ { category: 'vegetable', name: 'carrot' }, { category: 'vegetable', name: 'spinach' } ] }

方法二:使用 forEach 方法

forEach 方法可以遍历数组中的每个元素,并对其进行处理。虽然 reduce 更常用,但 forEach 也可以用于分组。

const items = [ { category: 'fruit', name: 'apple' }, { category: 'fruit', name: 'banana' }, { category: 'vegetable', name: 'carrot' }, { category: 'fruit', name: 'cherry' }, { category: 'vegetable', name: 'spinach' } ]; const groupedByCategory = {}; items.forEach(item => { if (!groupedByCategory[item.category]) { groupedByCategory[item.category] = []; } groupedByCategory[item.category].push(item); }); console.log(groupedByCategory);

输出与上面相同。

方法三:使用 Map 对象

Map 对象也可以用于分组,因为 Map 可以保持插入顺序,并且在处理未知键时更加直观。

const items = [ { category: 'fruit', name: 'apple' }, { category: 'fruit', name: 'banana' }, { category: 'vegetable', name: 'carrot' }, { category: 'fruit', name: 'cherry' }, { category: 'vegetable', name: 'spinach' } ]; const groupedByCategory = new Map(); items.forEach(item => { if (!groupedByCategory.has(item.category)) { groupedByCategory.set(item.category, []); } groupedByCategory.get(item.category).push(item); }); console.log(Object.fromEntries(groupedByCategory));

输出:

{ fruit: [ { category: 'fruit', name: 'apple' }, { category: 'fruit', name: 'banana' }, { category: 'fruit', name: 'cherry' } ], vegetable: [ { category: 'vegetable', name: 'carrot' }, { category: 'vegetable', name: 'spinach' } ] }

方法四:使用 Lodash 库

如果你使用 Lodash 库,那么分组操作会变得更加简洁。Lodash 提供了 _.groupBy 方法。

const _ = require('lodash'); const items = [ { category: 'fruit', name: 'apple' }, { category: 'fruit', name: 'banana' }, { category: 'vegetable', name: 'carrot' }, { category: 'fruit', name: 'cherry' }, { category: 'vegetable', name: 'spinach' } ]; const groupedByCategory = _.groupBy(items, 'category'); console.log(groupedByCategory);

输出与上面相同。

总结

以上是几种在 JavaScript 中进行数组分组的方法。根据你的需求选择合适的工具和方法可以简化你的代码并提高可读性。