gpt4 book ai didi

javascript - 如何减去对象数组中具有相似键的对象值? (不要与删除重复项混淆)

转载 作者:行者123 更新时间:2023-12-04 07:47:48 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to remove all duplicates from an array of objects?

(68 个回答)


4 个月前关闭。




假设我有一个对象

const testArray = [{key: 'a', value: 5}, {key: 'b', value: 1}, {key: 'a', value: 2}]
我想要的是
newArray = [{key: 'a', value: 3}, {key: 'b', value: 1}]
我试过的是
testArray.reduce((acc, cur, index) => {
const exists = !!acc && acc.find(item => item.key === cur.key)
if (!exists){
acc.push(cur)
} else {
// can't figure out what i should do here
}
return acc;
}, [])
或者其他任何其他简单的解决方案表示赞赏。
谢谢

最佳答案

您可以使用 Map其中 key 是 key来自对象的属性和值是整个对象。
现在对于 testArray 中的每个对象检查它是否 key存在于 Map , 如果存在,则只更新值,不存在则设置整个值。
解决方案使用 Map

const testArray = [{ key: "a", value: 5 }, { key: "b", value: 1 }, { key: "a", value: 2 }];

const res = Array.from(testArray.reduce(
(m, o) => (
m.has(o.key)
? m.set(o.key, { ...m.get(o.key), value: m.get(o.key).value - o.value })
: m.set(o.key, { ...o }),
m
),
new Map()
).values());

console.log(res)

相同的解决方案,但格式更易读

const testArray = [{ key: "a", value: 5 }, { key: "b", value: 1 }, { key: "a", value: 2 }];

const res = Array.from(testArray.reduce(
(m, o) => {
if (m.has(o.key)) {
const currVal = m.get(o.key);
m.set(o.key, {...currVal, value: currVal.value - o.value})
} else {
m.set(o.key, {...o})
}
return m;
},
new Map()
).values());

console.log(res)

使用对象的一个​​类轮
如果 key不存在于对象中然后创建一个对象,其中 value属性(property)是实际值(value)的两倍。
现在对于每个对象,只需用现有值减去当前值。

const 
testArray = [{ key: "a", value: 5 }, { key: "b", value: 1 }, { key: "a", value: 2 }],

res = testArray.reduce((m, {key, value}) => (m[key] ??= ((value) => ({key, value}))(2*value), m[key].value -= value, m), {});


console.log(Object.values(res))

关于javascript - 如何减去对象数组中具有相似键的对象值? (不要与删除重复项混淆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67135268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com