我是javascript的新手,我有 array对象,其中的键 total,failure 分别带有整数值。我想添加所有数组对象的 total ,还想从总和值
中得出故障的总百分比。使用javascript reduce函数,我能够添加所有数组对象的总数,但无法获得失败占总和值的百分比。请在这里提出您的宝贵意见
这是我的下面的代码:
var data = [
{"total":728, "failure": 76},
{"total":708, "failure": 56},
{"total":435, "failure": 36},
{"total":324, "failure": 93},
{"total":649, "failure": 65}
]
var r = data.reduce((a, b) => ({total: a.total + b.total}));
console.log(r)
在这里使用减少功能,我可以添加总计并获取计数,现在我需要使用减少功能将失败的总数占百分比。请提出
答案 0 :(得分:1)
这是使用解构语法的一种非常快捷简洁的方法:
const data = [{total:728,failure:76},{total:708,failure:56},{total:435,failure:36},{total:324,failure:93},{total:649,failure:65}];
const [total, failure] = data.reduce(
([total, failure], d) => [
total + d.total,
failure + d.failure
],
[0, 0]
);
console.log(total, failure / total * 100)
如果failure
已经是一个百分比,而不仅仅是一个计数,那么您需要将每个百分比与其各自的总数相乘以获得失败计数,然后将合计除以reduce()
的返回值与上面相同:
const data = [{total:728,failure:76},{total:708,failure:56},{total:435,failure:36},{total:324,failure:93},{total:649,failure:65}];
const [total, failure] = data.reduce(
([total, failure], d) => [
total + d.total,
failure + d.failure * d.total / 100
],
[0, 0]
);
console.log(total, failure / total * 100)
答案 1 :(得分:1)
如果failure
是百分比,则需要注意如何累积这样的数字。您应该首先将这样的百分比转换为绝对失败的 count 总数,然后再转换回百分比:
var data = [
{"total":728, "failure": 76},
{"total":708, "failure": 56},
{"total":435, "failure": 36},
{"total":324, "failure": 93},
{"total":649, "failure": 65}
];
const res = data.reduce((acc, b) => ({
total: acc.total + b.total,
failureCount: acc.failureCount + Math.round(b.total * b.failure/100)
}), { total: 0, failureCount: 0 });
res.failure = Math.round(res.failureCount / res.total * 100);
console.log(res);
我认为第一个Math.round
是必要的,因为失败计数不是整数是不合理的。 Math.round
的最终应用只是一个选择。如果您想要一个更准确的百分比,可以将其忽略。