📌  相关文章
📜  将具有相同名称的所有项目分组 js - Javascript (1)

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

将具有相同名称的所有项目分组

在 JavaScript 中,我们可以使用 Array.reduce() 方法来将具有相同名称的所有项目分组。这个方法接收两个参数,第一个是回调函数,第二个是初始值。

回调函数

回调函数接收两个参数:累加器和当前值。在这个问题中,累加器应该是一个对象,用于存储不同名称的项目列表。当前值是数组中的每个项目。

function groupByName(accumulator, currentValue) {
  const key = currentValue.name;
  if (!accumulator[key]) {
    accumulator[key] = [];
  }
  accumulator[key].push(currentValue);
  return accumulator;
}

这个函数首先检查累加器对象中是否已经有当前项目名称的属性。如果没有,它会在对象中创建一个新属性,并将一个空数组分配给它。接下来,它将当前项目添加到该数组中,并返回累加器对象。

初始值

默认情况下,reduce() 方法使用数组中的第一个元素作为初始值。但是,在这个问题中,我们需要一个空对象作为初始值。

const array = [
  { name: 'apple', id: 1 },
  { name: 'orange', id: 2 },
  { name: 'apple', id: 3 },
  { name: 'banana', id: 4 },
  { name: 'orange', id: 5 }
];
const result = array.reduce(groupByName, {});

这个例子中,我们有一个数组,其中包含一些具有名称和 ID 的项目。我们想要按名称对它们进行分组。我们调用 reduce() 方法,将 groupByName 函数作为回调函数传递,并将空对象作为初始值传递。reduce() 方法返回一个对象,其中包含按名称分组的所有项目。例如,如果我们调用 console.log(result.apple),它将输出一个数组,其中包含 ID 为 1 和 3 的项目。

这是一个完整的代码片段:

const array = [
  { name: 'apple', id: 1 },
  { name: 'orange', id: 2 },
  { name: 'apple', id: 3 },
  { name: 'banana', id: 4 },
  { name: 'orange', id: 5 }
];

function groupByName(accumulator, currentValue) {
  const key = currentValue.name;
  if (!accumulator[key]) {
    accumulator[key] = [];
  }
  accumulator[key].push(currentValue);
  return accumulator;
}

const result = array.reduce(groupByName, {});

// result:
// {
//   apple: [
//     { name: 'apple', id: 1 },
//     { name: 'apple', id: 3 }
//   ],
//   orange: [
//     { name: 'orange', id: 2 },
//     { name: 'orange', id: 5 }
//   ],
//   banana: [
//     { name: 'banana', id: 4 }
//   ]
// }