Итак, как я могу суммировать все значения во всех объектах в массиве, который поступает из React redux? - PullRequest
1 голос
/ 28 мая 2020

Это файл редуктора response redux, где массив чисел:

const initialState = {
numbers: [ { name: 'max', num: 3 }, { name: 'jack', num: 2 } ]
}

Вот как я хочу суммировать все значения num во всех объектах в массиве чисел, который получен из файла редуктора состояния response redux

В компоненте:

    useEffect(() => {
        const total = props.numbers.reduce((prev, current) => {
            return prev + current.num, 0;
        });
        console.log(total);
        console.log(props.numbers);
    }, []);

Это журналы консоли от useEffect:

0

(2) [{…}, {…}]
0: {name: "max", num: 3}
1: {name: "jack", num: 2}
length: 2
__proto__: Array(0)

Общее число констант равно 0, и оно не работает.

Итак, как я могу суммировать все значения num во всех объектах в массиве, который поступает из файла редуктора ??

Ответы [ 4 ]

0 голосов
/ 28 мая 2020

Вам необходимо указать начальное значение для prev в качестве второго параметра reduce. Если он не указан, то во время первого запуска первый параметр функции обратного вызова является первым элементом массива, а второй параметр функции обратного вызова - вторым элементом массива. Затем возвращаемое значение передается первому параметру, а следующий элемент - это второе значение.

Итак, чтобы добавить, я добавил 0 в качестве начального значения.

const numbers =  [ { name: 'max', num: 3 }, { name: 'jack', num: 2 } ]

const total = numbers.reduce((prev, { num }) => {
    return prev + num
}, 0)

console.log(total)
0 голосов
/ 28 мая 2020

нужно исправить сокращение:

const total = props.numbers.reduce((prev, current) => {
     return prev + current.num;
}, 0);
0 голосов
/ 28 мая 2020

Вы также можете использовать карту функцию

sum = 0;
props.numbers.map(n => {
    sum+= n.num;
})
0 голосов
/ 28 мая 2020

, 0 должен быть вторым аргументом reduce, а не return:

const total = props.numbers.reduce((prev, current) => {
  return prev + current.num;
}, 0);
...