Javascript - метод уменьшения, возвращающий объект объекта - PullRequest
1 голос
/ 27 мая 2020

У меня есть массив topArr, который я пытаюсь получить сумму объекта результатов. Я использовал метод .reduce(), чтобы выполнить sh это. Затем я объявляю другую переменную, равную сумме с размещением запятых.

У меня есть два примера фрагментов кода попытки ниже.

Во-первых, я получаю возвращаемое значение [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)

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Вы не передаете начальное значение в .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 голосов
/ 27 мая 2020

Вам нужно дать уменьшить начальное значение, чтобы сложить от

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

...