ZetCode

JavaScript group() 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 group 方法对数组元素进行分组。

数组分组

数组分组是根据分组函数将数组元素组织成类别的一种操作。group 方法根据提供的回调函数返回的字符串值对数组的元素进行分组。

此方法返回一个新对象,该对象具有代表组的属性和包含属于每个组的元素的数组。原始数组不会被修改。回调函数将针对数组中的每个元素执行。

group 方法是在 ECMAScript 2022 (ES13) 中引入的。它提供了一种方便的方法来对数据进行分类,无需外部库。分组是区分大小写的,并保持元素的原始顺序。

基本 group() 示例

以下示例演示了 group 方法的基本用法。

main.js
const inventory = [
  { name: 'asparagus', type: 'vegetables' },
  { name: 'bananas', type: 'fruit' },
  { name: 'goat', type: 'meat' },
  { name: 'cherries', type: 'fruit' },
  { name: 'fish', type: 'meat' }
];

const result = inventory.group(({ type }) => type);

console.log(result);

我们创建了一个对象数组,并根据它们的 type 属性对它们进行分组。回调函数提取 type 值,该值成为组键。结果是一个对象,其属性与组键匹配。

$ node main.js
{
  vegetables: [{ name: 'asparagus', type: 'vegetables' }],
  fruit: [
    { name: 'bananas', type: 'fruit' },
    { name: 'cherries', type: 'fruit' }
  ],
  meat: [
    { name: 'goat', type: 'meat' },
    { name: 'fish', type: 'meat' }
  ]
}

按奇偶性对数字进行分组

我们可以根据数字是偶数还是奇数对数字进行分组。

main.js
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const grouped = numbers.group((num) => {
  return num % 2 === 0 ? 'even' : 'odd';
});

console.log(grouped);

我们创建了一个数字数组,并将它们分组到“even”和“odd”类别中。回调函数检查每个数字的奇偶性,并返回相应的组键。结果包含“even”和“odd”键下的两个数组。

$ node main.js
{
  odd: [1, 3, 5, 7, 9],
  even: [2, 4, 6, 8, 10]
}

按字符串长度分组

group 方法可以按字符串长度对字符串进行分类。

main.js
const words = ['apple', 'banana', 'cat', 'dog', 'elephant', 'fox'];

const lengthGroups = words.group((word) => {
  return word.length > 5 ? 'long' : 'short';
});

console.log(lengthGroups);

我们根据它们的长度将一个单词数组分组到“long”和“short”类别中。回调函数检查每个单词的字符数,并返回相应的组键。分组是基于我们长度标准的动态分组。

$ node main.js
{
  short: ['apple', 'cat', 'dog', 'fox'],
  long: ['banana', 'elephant']
}

按年龄范围对对象进行分组

我们可以使用 group 方法将对象分组到年龄范围。

main.js
const people = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 17 },
  { name: 'Charlie', age: 30 },
  { name: 'David', age: 15 },
  { name: 'Eve', age: 22 }
];

const ageGroups = people.group((person) => {
  if (person.age < 18) return 'minor';
  if (person.age < 30) return 'adult';
  return 'senior';
});

console.log(ageGroups);

我们根据人们的年龄将他们分为“minor”、“adult”和“senior”组。回调函数包含条件逻辑,以确定每个人的适当组。结果是一个具有三个属性的对象。

$ node main.js
{
  minor: [
    { name: 'Bob', age: 17 },
    { name: 'David', age: 15 }
  ],
  adult: [
    { name: 'Alice', age: 25 },
    { name: 'Eve', age: 22 }
  ],
  senior: [{ name: 'Charlie', age: 30 }]
}

使用复杂键进行分组

group 方法可以使用结合多个值的复杂键。

main.js
const products = [
  { name: 'Laptop', category: 'Electronics', price: 999 },
  { name: 'Shirt', category: 'Clothing', price: 25 },
  { name: 'Phone', category: 'Electronics', price: 699 },
  { name: 'Pants', category: 'Clothing', price: 45 }
];

const groupedProducts = products.group((product) => {
  return `${product.category}-${product.price > 100 ? 'expensive' : 'cheap'}`;
});

console.log(groupedProducts);

我们按类别和价格范围对产品进行分组。回调函数创建结合类别和价格信息的复合键。这演示了如何创建更复杂的分组标准。

$ node main.js
{
  'Electronics-expensive': [
    { name: 'Laptop', category: 'Electronics', price: 999 },
    { name: 'Phone', category: 'Electronics', price: 699 }
  ],
  'Clothing-cheap': [
    { name: 'Shirt', category: 'Clothing', price: 25 },
    { name: 'Pants', category: 'Clothing', price: 45 }
  ]
}

来源

数组 group() - 语言参考

在本文中,我们演示了如何使用 group() 方法在 JavaScript 中对数组元素进行分类。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 JS 数组函数。