我有一个数组 topArr
我试图获取结果对象的总和。我使用 .reduce()
方法来实现这一目的。然后我在声明另一个变量,用逗号的位置来等于总和。
下面我有两个尝试的代码片段例子。
首先,我得到的返回值是 [object Object]48,883
.
第二个例子,我得到的是数组中第一个数字的返回值,它没有结合其他对象。
我希望两个结果结合起来的结果等于两个对象的数量。543,810
这是我的代码片段。
let topArr = [
{ result: "494,927", risk: "HIGH", sector: "Online" },
{ result: "48,883", risk: "HIGH", sector: "Retail Stores" },
],
sum = topArr.reduce(function (a, e) {
return a + Number(e.result.replace(/(,\s*)+/g, '').trim());
})
let sumComma = sum.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
console.log(sumComma)
let topArr = [
{ result: "494,927", risk: "HIGH", sector: "Online" },
{ result: "48,883", risk: "HIGH", sector: "Retail Stores" },
],
sum = topArr.reduce(function (e) {
return Number(e.result.replace(/(,\s*)+/g, '').trim());
})
let sumComma = sum.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
console.log(sumComma)
你没有将初始值传递给 .reduce
所以初始值默认为数组中的第一个项目,也就是一个对象,所以 a + Number(...)
的结果是将对象(胁迫为一个字符串)与Number调用连接起来。
传递一个初始值0代替。
let topArr = [{
result: "494,927",
risk: "HIGH",
sector: "Online"
},
{
result: "48,883",
risk: "HIGH",
sector: "Retail Stores"
},
],
sum = topArr.reduce(function(a, e) {
return a + Number(e.result.replace(/(,\s*)+/g, '').trim());
}, 0)
let sumComma = sum.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
console.log(sumComma)
你需要给reduce一个初始值,以便从...
const sum = topArr.reduce((acc, cur) => {
return acc + Number(cur.result.replace(/(,\s*)+/g, '').trim());
}, 0)