1 回答
TA贡献1784条经验 获得超8个赞
以下是代码的工作方式。currentTotal第一次运行的值是 reduce 函数的第二个参数,而Array#reduce(function,initialValue)不是{probability: 0, plan2: 0}一个数字。
所以,你不需要做任何对象解构,你只需要使用累加器对你想要的对象的各个键求和,然后返回这些新值。然后您的最终结果将与您用于初始值的类型相同。
这会将概率和 plan2 值转换为数字,以便能够正确地求和。
const h = {
lead_plans: [{
probability: '2.2',
plan2: '5.2'
}, {
probability: '7.8',
plan2: '3.1'
}, {
probability: '1.8',
plan2: '2.3'
}]
}
const result = h.lead_plans.reduce(
(accumulator, currentDau) => {
return {
probability: accumulator.probability + parseFloat((currentDau.probability || 0)),
plan2: accumulator.plan2 + parseFloat((currentDau.plan2 || 0)),
};
}, {
probability: 0,
plan2: 0
}
);
console.log(result);
下面是一个示例,说明如何制作一个更可重用的 reducer 来汇总对象中的所有条目:
请注意,这是将所有键转换为数字,因此如果存在不是数字的值,它们将是 NaN。
const h = {
lead_plans: [{
probability: '2.5',
plan2: 5
}, {
probability: 7,
plan2: 3
}, {
probability: 1,
plan2: 2
}]
}
const reducerSumAll = (accumulator, object) => {
// Ensure there are no accidental mutations
const current = { ...accumulator };
for (const key of Object.keys(object)) {
// Make sure we are only accumulating the number types.
current[key] = parseFloat(current[key]||0) + parseFloat(object[key]||0);
}
return current;
};
const result = h.lead_plans.reduce(reducerSumAll)
console.log(result)
添加回答
举报