js 数组对象合并相同属性值

js 数组对象合并相同属性值

js 数组对象合并相同属性值

JavaScript 中,我们经常会遇到需要合并数组对象中相同属性值的情况。有时候我们需要将具有相同属性值的对象合并成一个对象,以便更好地处理数据。本文将详细介绍如何使用 JavaScript 实现合并具有相同属性值的数组对象。

1. 合并相同属性值的数组对象

首先,我们需要准备一个包含多个对象的数组作为示例数据:

const data = [
  { id: 1, name: 'Alice', age: 25 },
  { id: 2, name: 'Bob', age: 30 },
  { id: 3, name: 'Alice', age: 28 },
  { id: 4, name: 'Alice', age: 27 },
  { id: 5, name: 'Bob', age: 32 },
];

现在,我们要做的是将具有相同 name 属性值的对象合并为一个对象,计算它们的 age 属性的平均值。我们可以按照以下步骤来实现:

  1. 创建一个空对象 result,用于存放合并后的结果;
  2. 遍历原始数组 data,将具有相同 name 属性值的对象合并为一个对象,并计算其 age 属性的平均值;
  3. 将合并后的对象添加到 result 中。

下面是具体的代码实现:

const result = data.reduce((acc, cur) => {
  if (!acc[cur.name]) {
    acc[cur.name] = { name: cur.name, age: cur.age, count: 1 };
  } else {
    acc[cur.name].age += cur.age;
    acc[cur.name].count++;
  }
  return acc;
}, {});

for (let key in result) {
  result[key].age /= result[key].count;
}

const mergedData = Object.values(result);

console.log(mergedData);

在这段代码中,我们使用了 reduce() 方法来遍历原始数组,并将具有相同 name 属性值的对象合并为一个对象,同时累计对应的 age 属性值和计数器。最后计算平均值,并将合并后的对象存入 mergedData 数组中。运行以上代码,会输出如下结果:

[
  { name: 'Alice', age: 26.666666666666668, count: 3 },
  { name: 'Bob', age: 31, count: 2 }
]

可以看到,我们成功地将具有相同 name 属性值的对象合并为一个对象,并计算了每个对象的 age 平均值。

2. 综合实例

为了更好地理解以上方法,我们可以结合实际应用场景,比如一个学生列表的数据处理。假设我们有如下学生信息的数组对象:

const students = [
  { id: 1, name: 'Alice', score: 85 },
  { id: 2, name: 'Bob', score: 90 },
  { id: 3, name: 'Alice', score: 88 },
  { id: 4, name: 'Alice', score: 92 },
  { id: 5, name: 'Bob', score: 95 },
];

我们想要按照姓名将学生成绩合并,并计算平均成绩,那么可以使用以下代码实现:

const result = students.reduce((acc, cur) => {
  if (!acc[cur.name]) {
    acc[cur.name] = { name: cur.name, totalScore: cur.score, count: 1 };
  } else {
    acc[cur.name].totalScore += cur.score;
    acc[cur.name].count++;
  }
  return acc;
}, {});

for (let key in result) {
  result[key].averageScore = result[key].totalScore / result[key].count;
  delete result[key].count;
  delete result[key].totalScore;
}

const mergedStudents = Object.values(result);

console.log(mergedStudents);

运行以上代码,会输出如下结果:

[
  { name: 'Alice', averageScore: 88.33333333333333 },
  { name: 'Bob', averageScore: 92.5 }
]

通过以上综合实例,我们成功地将学生成绩合并为一个对象,并计算了每个学生的平均成绩。

3. 总结

在 JavaScript 中,合并具有相同属性值的数组对象是一种常见的数据处理需求。通过使用 reduce() 方法,我们可以高效地实现这一功能。在实际应用中,可以根据具体情况定制合并逻辑,实现更加灵活的数据处理。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程