Étant donné un tableau avec différents types de données. J'écris une fonction pour trouver les valeurs qui sont fausses
et renvoie le tableau sans les valeurs fausses
.
Par exemple:
In case of input: `bouncer([false, null, 0, NaN, undefined, ""]);` It returns: [ null, NaN, '' ] But it should return: []
5 Réponses :
Utilisez simplement filtre
Ce que le filtre fait ici, c'est qu'il ajoute de la valeur dans le tableau de sortie uniquement s'il est vrai.
let arr = [false, null, 0, NaN, undefined, "", 1 , 123]; let op = arr.filter(value => value); console.log(op)
const bouncer = (arr) => arr.filter(val => !!val);
Vous avez presque terminé, mais il vaudrait mieux vérifier quelles valeurs sont fausses plutôt que de les comparer, donc cette fonction fera l'affaire
const getNonFalsyValues = (arr) => { return arr.reduce((arr, current) => { if (Boolean(current)) { arr.push(current); } return arr; }, []); }
J'espère qu'elle pourra vous aider. p>
En JavaScript, certaines valeurs sont évaluées à false
, comme null
, la chaîne vide ''
et undefined
. Vous pouvez en savoir plus sur l'évaluation en JavaScript ici < / a>.
Vous devez également utiliser ===
au lieu de ==
dans les comparaisons. Voir ceci .
Comme d'autres personnes le disent, vous pouvez utiliser filter ()
à cette fin. Le moyen le plus court serait:
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}
function bouncer(arr) { for (var i = 0; i < arr.length; i++) { if (Boolean(arr[i]) === false) { arr.splice(i, 1); i = i - 1; } } console.log(arr); } bouncer([false, null, true, 0, NaN, undefined, "", "Hola Mundo"]);
Cependant, pour revenir à votre code, vous devriez noter que la méthode splice ()
changera le tableau lorsqu'elle détectera une valeur falsy
(car supprime un élément). En d'autres termes, le arr.length
diminue de façon dynamique pendant l'exécution de la boucle, mais la variable i
continue de s'incrémenter. Cela génère que la boucle ne bouclera pas tous les éléments du tableau. Pour résoudre ce problème, vous devez décrémenter la valeur de la variable i
lorsque vous supprimez un élément du tableau. Vérifiez le code suivant:
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}
const array = [false, null, true, 0, NaN, undefined, "", "Hola Mundo"]; console.log(array.filter(Boolean));
JavaScript a le concept de "faux", utilisez donc
===
au lieu de==
. En savoir plus ici: developer.mozilla.org/en-US/docs/Glossary/ FauxNe changez pas le tableau sur lequel vous itérez, sauf si vous savez ce que vous faites;) Vérifiez les éléments à chaque étape. (Indice: que se passe-t-il avec les éléments après l'élément qui est supprimé?)