我有一个像这样的对象数组:
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.reduce
b、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] 删除。
我来说两句