Редуктор, возвращающий NAN из массива

#javascript #arrays #undefined #nan

#javascript #массивы #не определено #nan

Вопрос:

Проблема

У меня есть массив, подобный так:

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

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

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

Когда я вызываю консоль.войти, я получаю это:

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

До тех пор, пока массив больше не будет содержать undefined:

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

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

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

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

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

Спасибо!

Ответ №1:

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

 let oddsArray = [undefined, undefined, 5, 5]
const reducer = oddsArray.reduce((accumulator, currentValue) =>
                      accumulator   (currentValue || 0), 0);
console.log(reducer);  

Ответ №2:

В случае, если вам нужен более общий подход, т. е. для суммирования только чисел в массиве с элементами нескольких типов, вы можете использовать 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;}