首页 >web前端 >js教程 >如何在 JavaScript 中按多个属性对对象进行分组并聚合它们的值?

如何在 JavaScript 中按多个属性对对象进行分组并聚合它们的值?

Barbara Streisand
Barbara Streisand原创
2024-11-10 12:12:03425浏览

How to Group Objects by Multiple Properties and Aggregate Their Values in JavaScript?

按多个属性对对象进行分组并聚合它们的值

按多个属性对数组中的元素进行分组对于数据组织和汇总至关重要。为了满足按形状和颜色对对象进行分组并聚合其值的特定要求,我们可以利用 JavaScript 内置方法的强大功能。

第 1 步:Array#reduce

Array#reduce 方法提供了一种简洁有效的方法来迭代数组,累积各个元素的单个输出。在这种情况下,我们可以使用它根据组合的形状和颜色属性来累积对象。

第 2 步:辅助对象

我们使用辅助对象来跟踪形状和颜色的独特组合。对于数组中的每个对象,我们通过连接形状和颜色属性来检查帮助器中是否存在该组合。如果不存在,我们在辅助对象中创建一个新条目,同时将当前对象的副本推送到结果数组中。

第 3 步:值聚合

如果辅助对象中已经存在类似的组合,我们只需增加相应条目的使用值和实例值,即可有效聚合当前对象中的值。

第 4 步:对象复制

为了避免修改数组中的原始对象,我们使用 Object.assign 创建一个副本。这确保了辅助对象包含对象的独立副本,从而允许我们单独聚合值。

实现:

const arr = [
  { shape: 'square', color: 'red', used: 1, instances: 1 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
  { shape: 'circle', color: 'blue', used: 0, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 4 },
  { shape: 'circle', color: 'red', used: 1, instances: 1 },
  { shape: 'circle', color: 'red', used: 1, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 5 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
];

const helper = {};
const result = arr.reduce((r, o) => {
  const key = o.shape + '-' + o.color;
  if (!helper[key]) {
    helper[key] = Object.assign({}, o); // create a copy of o
    r.push(helper[key]);
  } else {
    helper[key].used += o.used;
    helper[key].instances += o.instances;
  }
  return r;
}, []);

console.log(result);

输出:

[
  { shape: 'square', color: 'red', used: 5, instances: 3 },
  { shape: 'circle', color: 'red', used: 2, instances: 1 },
  { shape: 'square', color: 'blue', used: 11, instances: 9 },
  { shape: 'circle', color: 'blue', used: 0, instances: 0 }
]

该解决方案有效地按形状和颜色聚合对象,提供一致的数据摘要。

以上是如何在 JavaScript 中按多个属性对对象进行分组并聚合它们的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn