3
votes

Impossible de supprimer tous les booléens == false dans le tableau

É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: []


2 commentaires

JavaScript a le concept de "faux", utilisez donc === au lieu de == . En savoir plus ici: developer.mozilla.org/en-US/docs/Glossary/ Faux


Ne 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é?)


5 Réponses :


0
votes

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)


0 commentaires

0
votes
const bouncer = (arr) => arr.filter(val => !!val);

0 commentaires

1
votes

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>


0 commentaires

0
votes

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 .


0 commentaires

3
votes

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));


0 commentaires