📅  最后修改于: 2023-12-03 15:31:43.813000             🧑  作者: Mango
在开发中,我们经常会遇到需要对数组进行分组的情况。本篇文章将介绍几种常见的 JavaScript 数组分组方法。
我们可以使用 for 循环和对象来实现数组分组。代码如下:
const arr = [1, 2, 3, 4, 5, 6];
const group = {};
for (let i = 0; i < arr.length; i++) {
const key = arr[i] % 2 === 0 ? 'even' : 'odd';
if (!group[key]) {
group[key] = [];
}
group[key].push(arr[i]);
}
console.log(group);
// 输出:{ odd: [ 1, 3, 5 ], even: [ 2, 4, 6 ] }
上述代码中,我们先定义了一个空对象 group
,然后遍历数组 arr
,使用余数操作符 %
来判断当前元素是奇数还是偶数,从而确定分组的键名 key
。如果 group
对象中没有该键名的键值对,则新建一个空数组,否则在已有的数组中 push 进当前元素。
reduce 方法可以在遍历数组时将其每一项累加到一个结果上,我们可以在累加过程中实现数组分组。代码如下:
const arr = [1, 2, 3, 4, 5, 6];
const group = arr.reduce((result, current) => {
const key = current % 2 === 0 ? 'even' : 'odd';
if (!result[key]) {
result[key] = [];
}
result[key].push(current);
return result;
}, {});
console.log(group);
// 输出:{ odd: [ 1, 3, 5 ], even: [ 2, 4, 6 ] }
上述代码中,我们将最开始的累加器 result
初始化为一个空对象 {}
,在每次循环时执行与方法一相同的逻辑。
Map 对象是 ES6 中新增的数据结构,它提供了一种更优雅的数组分组方式。代码如下:
const arr = [1, 2, 3, 4, 5, 6];
const group = arr.reduce((map, current) => {
const key = current % 2 === 0 ? 'even' : 'odd';
if (!map.has(key)) {
map.set(key, []);
}
map.get(key).push(current);
return map;
}, new Map());
console.log(group);
// 输出:Map { 'odd' => [ 1, 3, 5 ], 'even' => [ 2, 4, 6 ] }
上述代码中,我们首先使用 new Map()
创建了一个空的 Map 对象 map
,接着在每次循环中执行与方法一相同的逻辑,然后使用 map.get(key)
方法来获取对应键名的键值对,并将当前元素 push 进去。
以上就是三种常见的 JavaScript 数组分组方法,大家可以根据个人喜好选择适合自己的方式。