如何只对对象中的某些属性求和



我有动态对象属性,它们在同一对象中合起来等于分数。将这些类型的值加在一起写入score属性的最佳方法是什么?

0: Object
id: 1
name: "Player 1"
score: 0
1game1: 10
1: Object
id: 2
name: "Player 2"
score: 0
2game1: 10
2game2: 15

理想的结果是:

0: Object
id: 1
name: "Player 1"
score: 10
1game1: 10
1: Object
id: 2
name: "Player 2"
score: 25
2game1: 10
2game2: 15

这在React中被用作基于每个"游戏"的值更新分数的状态。因此可以添加或删除更多的游戏,并且可以随时编辑分数。

就像评论一样,通常我也会建议切换到数组,即使以嵌套它们为代价(为了跟踪单个游戏的各个部分)。

从技术上讲,你现在可以做的是循环遍历对象字段,并在它们的名称包含"game"时对它们求和。在:

function setScore(o) {
return o.score = Object.keys(o).reduce(
(sum, key) => key.indexOf("game") !== -1 ? sum + o[key] : sum, 0);
}
let o1 = {
id: 1,
name: "Player 1",
score: 0,
"1game1": 10
};
let o2 = {
id: 2,
name: "Player 2",
score: 0,
"2game1": 10,
"2game2": 15
}
console.log(setScore(o1));
console.log(o1);
console.log(setScore(o2));
console.log(o2);

最新更新