在对象数组中查找具有相同属性的元素并创建新的对象数组

玛丽安·桑杜尔

我有一个像这样的对象数组:

arr = [
  { a: "dog", b: 8, c: "male", d: "big", e: 100 },
  { a: "dog1", b: 5, c: "female", d: "big", e: 200},
  { a: "dog2", b: 18, c: "female", d: "big", e: 350},
  { a: "dog2", b: 18, c: "female", d: "big", e: 350},
  { a: "dog", b: 3, c: "male", d: "big", e: 100 },
  { a: "dog", b: 8, c: "male", d: "big", e: 100 },
];

我想创建一个新数组,其中只包含参数 a 和那些具有相同参数 b、c 和 d 的对象的参数 e 的总和,这样我就可以拥有这样的数组:

arr2 = [
  { a: "dog", e: 300 },
  { a: "dog2", e: 700},
];

我已经尝试在 map 函数中使用 map 函数查找具有相同属性 b、c 和 d 的元素并将结果推送到 arr2 中,但它每次都会推送我初始 arr 的所有对象。

特里·伦诺克斯

您可以使用Array.reduceb、c 和 d 组合作为键来创建数组元素的映射。

一旦我们有了这张地图,我们就可以使用它Object.values()来获取一个数组作为所需的结果。

arr = [
  { a: 'dog', b: 8, c: 'male', d: 'big', e: 100 },
  { a: 'dog1', b: 5, c: 'female', d: 'big', e: 200},
  { a: 'dog2', b: 18, c: 'female', d: 'big', e: 350},
  { a: 'dog2', b: 18, c: 'female', d: 'big', e: 350},
  { a: 'dog', b: 3, c: 'male', d: 'big', e: 100 },
  { a: 'dog', b: 8, c: 'male', d: 'big', e: 100 },
];

const result = Object.values(arr.reduce((acc, cur) => {
    // Create a key from b,c,d..
    const key = cur.b + cur.c + cur.d
    acc[key] = acc[key] || { a: cur.a, e: 0 };
    acc[key].e += cur.e;
    return acc;
}, {}))

console.log('Result:', result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在对象数组中查找具有相同属性的元素并创建一个新的对象数组

NodeJS / Javascript在不同数组中查找具有相同属性的对象

从数组中查找和删除具有相同属性的对象

Javascript-在对象数组中查找(不删除)具有重复属性的元素

如何排列具有相同属性值的对象数组?

过滤数组,使具有相同属性的对象在数组中只出现一次

我如何使用javascript中具有相同键的对象在对象中创建对象数组

合并对象数组的相同属性,并在该对象数组中为不同属性创建对象数组

从数组中删除具有相同属性值的元素

在具有相同value属性的数组中查找对象

如何将具有相同属性的对象合并到数组中?

如何将具有相同属性的对象合并到单个数组中?

将具有相同属性的对象连接到不同数组中

如何在javascript中检索具有相同属性值的对象数组

Javascript在对象数组中查找所有出现的名称并创建新的唯一数组

当输入是属性值Javascript的数组时,从Array对象中删除具有相同属性值的对象

对象对象数组。获取具有相同属性的所有值的长度

在对象数组中查找所有匹配的元素

在对象的JavaScript数组中查找属性

在对象数组中查找特定属性

如何获得具有相同属性并在数组中具有最大值的对象-Javascript

将具有相同属性的对象数组转换为具有数组值的一个对象

减少具有相同键和连接相同属性的对象数组

在Powershell中,如何在数组中测试已经包含具有所有相同属性的对象?

将具有相同属性的两个对象的方法合并到每个属性的数组中

XSLT - 从具有相同属性名称的元素创建属性值数组

从对象数组的对象中创建具有唯一元素的新对象

如何避免创建具有相同属性的对象

如何将具有相同属性的JavaScript对象拆分为数组