具有减少功能的JavaScript总和和百分比

时间:2019-07-01 19:30:52

标签: javascript

我是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)

在这里使用减少功能,我可以添加总计并获取计数,现在我需要使用减少功能将失败的总数占百分比。请提出

2 个答案:

答案 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的最终应用只是一个选择。如果您想要一个更准确的百分比,可以将其忽略。