Javascript - reduce方法返回对象对象

问题描述 投票:0回答:2

我有一个数组 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)
javascript arrays reduce
2个回答
2
投票

你没有将初始值传递给 .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)

0
投票

你需要给reduce一个初始值,以便从...

const sum = topArr.reduce((acc, cur) => {
     return acc + Number(cur.result.replace(/(,\s*)+/g, '').trim());
}, 0)

© www.soinside.com 2019 - 2024. All rights reserved.