Редуктор, возвращающий NAN из массива - PullRequest
2 голосов
/ 07 марта 2019

Задача

У меня есть такой массив:

let oddsArray = [undefined, undefined, 5, 5]

И функция редуктора:

const reducer = (accumulator, currentValue) => accumulator + currentValue

Когда я вызываю console.log, я получаю это:

console.log(oddsArray.reduce(reducer, 1), 'oddsArray') /// NAN

Пока массив больше не содержит неопределенных:

[5, 5, 5, 5] /// 20

Что я хочу, чтобы произошло

Я хочу иметь возможность сложить все числа в массиве, даже если в этот массив включены неопределенные значения. Таким образом, исходный массив должен был равняться:

let oddsArray = [undefined, undefined, 5, 5] // 10

Как мне этого добиться?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 07 марта 2019

Вы можете проверить значение undefined следующим образом: currentValue || 0

let oddsArray = [undefined, undefined, 5, 5]
const reducer = oddsArray.reduce((accumulator, currentValue) =>
                      accumulator + (currentValue || 0), 0);
console.log(reducer);
1 голос
/ 07 марта 2019

В случае, если вам нужен более общий подход, т. Е. Для суммирования только чисел в массиве с несколькими типами элементов, вы можете использовать Number.isNaN () , чтобы проверить, является ли текущее значение reducer - это число или нет:

let oddsArray = [undefined, undefined, 5, 5, null, "hola", {"foo":"bar"}];
const reducer = (acc, currVal) => acc + (isNaN(currVal) ? 0 : currVal);
let res = oddsArray.reduce(reducer, 0);
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
...