Problème

J'ai un tableau comme ça:

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

Et une fonction réducteur :

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

Lorsque j'appelle console.log, j'obtiens ceci :

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

Jusqu'à ce que le tableau n'inclue plus undefined :

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

Ce que je veux arriver

Je veux pouvoir additionner tous les nombres du tableau, même s'il y a des valeurs indéfinies incluses dans ce tableau. Le tableau initial aurait donc dû être égal à :

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

Comment puis-je y parvenir?

Merci!

2
A7DC 7 mars 2019 à 04:06

2 réponses

Meilleure réponse

Dans le cas où vous avez besoin d'une approche plus générique, c'est-à-dire pour additionner uniquement les nombres sur un tableau avec plusieurs types d'éléments, vous pouvez utiliser Number.isNaN() pour vérifier si la valeur actuelle de reducer est un nombre ou non :

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;}
1
Shidersz 7 mars 2019 à 04:49

Vous pouvez vérifier la valeur undefined comme suit : currentValue || 0

let oddsArray = [undefined, undefined, 5, 5]
const reducer = oddsArray.reduce((accumulator, currentValue) =>
                      accumulator + (currentValue || 0), 0);
console.log(reducer);
4
Ele 7 mars 2019 à 01:11