📌  相关文章
📜  javascript 按对象的属性数组分组 - Javascript (1)

📅  最后修改于: 2023-12-03 14:42:34.445000             🧑  作者: Mango

JavaScript按对象的属性数组分组

在JavaScript中,如果你有一个包含对象的数组,并且想要按照对象的某个属性对数组进行分组,那么你可以使用一些技巧和方法来实现这个功能。下面是一些使用JavaScript按对象的属性数组分组的方法。

方法一:使用reduce方法

reduce方法是一个高阶函数,在数组中的每个元素上调用一个回调函数,并将结果归约为单个值。我们可以利用reduce方法来实现按对象的属性数组分组的功能。

const arr = [
  { name: 'Alice', group: 'A' },
  { name: 'Bob', group: 'B' },
  { name: 'Charlie', group: 'A' },
  { name: 'Dave', group: 'C' },
  { name: 'Eva', group: 'B' },
];

const grouped = arr.reduce((result, obj) => {
  const key = obj.group;
  if (!result[key]) {
    result[key] = [];
  }
  result[key].push(obj);
  return result;
}, {});

console.log(grouped);

上述代码将按照group属性将数组arr中的对象进行分组,并将结果存储在grouped对象中。grouped对象的键是group属性的值,值是相应的对象数组。

输出结果如下:

{
  A: [
    { name: 'Alice', group: 'A' },
    { name: 'Charlie', group: 'A' }
  ],
  B: [
    { name: 'Bob', group: 'B' },
    { name: 'Eva', group: 'B' }
  ],
  C: [ { name: 'Dave', group: 'C' } ]
}
方法二:使用Map对象

Map是一种用于存储键值对的集合,其中的键可以是任意数据类型。我们可以利用Map对象来实现按对象的属性数组分组的功能。

const arr = [
  { name: 'Alice', group: 'A' },
  { name: 'Bob', group: 'B' },
  { name: 'Charlie', group: 'A' },
  { name: 'Dave', group: 'C' },
  { name: 'Eva', group: 'B' },
];

const grouped = new Map();

arr.forEach(obj => {
  const key = obj.group;
  if (!grouped.has(key)) {
    grouped.set(key, []);
  }
  grouped.get(key).push(obj);
});

console.log(grouped);

上述代码将按照group属性将数组arr中的对象进行分组,并将结果存储在Map对象grouped中。grouped对象的键是group属性的值,值是相应的对象数组。

输出结果如下:

Map {
  'A' => [
    { name: 'Alice', group: 'A' },
    { name: 'Charlie', group: 'A' }
  ],
  'B' => [
    { name: 'Bob', group: 'B' },
    { name: 'Eva', group: 'B' }
  ],
  'C' => [ { name: 'Dave', group: 'C' } ]
}
方法三:使用对象字面量

我们也可以使用JavaScript对象字面量来实现按对象的属性数组分组的功能。

const arr = [
  { name: 'Alice', group: 'A' },
  { name: 'Bob', group: 'B' },
  { name: 'Charlie', group: 'A' },
  { name: 'Dave', group: 'C' },
  { name: 'Eva', group: 'B' },
];

const grouped = {};

arr.forEach(obj => {
  const key = obj.group;
  if (!grouped[key]) {
    grouped[key] = [];
  }
  grouped[key].push(obj);
});

console.log(grouped);

上述代码将按照group属性将数组arr中的对象进行分组,并将结果存储在对象grouped中。grouped对象的键是group属性的值,值是相应的对象数组。

输出结果如下:

{
  A: [
    { name: 'Alice', group: 'A' },
    { name: 'Charlie', group: 'A' }
  ],
  B: [
    { name: 'Bob', group: 'B' },
    { name: 'Eva', group: 'B' }
  ],
  C: [ { name: 'Dave', group: 'C' } ]
}

以上是几种常见的按对象的属性数组分组的方法,你可以根据自己的需求选择适合的方法来实现该功能。希望对你有所帮助!