📜  javascript 数组分组方式 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:43.813000             🧑  作者: Mango

JavaScript 数组分组方式

在开发中,我们经常会遇到需要对数组进行分组的情况。本篇文章将介绍几种常见的 JavaScript 数组分组方法。

方法一:使用 for 循环和对象

我们可以使用 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 方法

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 对象

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 数组分组方法,大家可以根据个人喜好选择适合自己的方式。