web-dev-qa-db-fra.com

Suppression de valeurs non définies du tableau

Dans certaines situations, il peut arriver que nous ayons des valeurs undefined ou généralement falsy dans les structures Array. Par exemple, lors de la lecture et du remplissage de données provenant de sources inconnues comme les bases de données ou les structures HTML. Comme

var data = [42, 21, undefined, 50, 40, undefined, 9]

Étant donné que cela pourrait causer des problèmes lors du bouclage sur de tels tableaux et du travail sur les éléments, quelle est la meilleure pratique pour supprimer undefined (valeurs de falsification)?

28
jAndy

Utiliser Array.prototype.filter Ici pourrait être évident. Donc, pour supprimer uniquement les valeurs non définies, nous pourrions appeler

var data = [42, 21, undefined, 50, 40, undefined, 9];

data = data.filter(function( element ) {
   return element !== undefined;
});

Si nous voulons filtrer toutes les valeurs fausses (telles que 0 ou null), nous pouvons utiliser return !!element; À la place.

Mais nous pouvons le faire un peu plus élégant, en passant simplement la fonction constructeur Boolean, respectivement la fonction constructeur Number à .filter:

data = data.filter( Number );

Cela ferait le travail dans ce cas, pour supprimer généralement toute valeur falsy, nous appellerions

data = data.filter( Boolean );

Étant donné que le constructeur Boolean() renvoie true sur vérité valeurs et false sur n'importe quelle valeur falsy, c'est une très option soignée.

66
jAndy

Inline à l'aide de lambda

result.filter(item => item);
48
raphaklaus

Vous pouvez utiliser la méthode lodash compact, qui supprime null, undefined et ''

_.compact(data)
5
Akash Dathan

Array.prototype.reduce() peut être utilisé pour supprimer des éléments par condition d'un tableau mais avec une transformation supplémentaire des éléments si nécessaire en une seule itération.


Supprimez les valeurs undefined du tableau, avec la prise en charge des sous-tableaux.

function transform(arr) {
    return arr.reduce((memo, item) => {
        if (typeof item !== "undefined") {
            if (Array.isArray(item)) item = transform(item);
            // We can transform item here.
            memo.Push(item);
        }
        return memo;
    }, []);
}

let test1 = [1, 2, "b", 0, {}, "", , " ", NaN, 3, undefined, null, 5, false, true, [1, true, 2, , undefined, 3, false, ''], 10];

console.log(transform(test1));

Essayez-le sur jsfiddle.net/bjoy4bcc/

2
Bogdan Potishuk
var a =  ["3","", "6"];
var b =  [23,54,56];
var result = [];

for (var i=0;i<a.length;++i) {
    if (a[i] != "") {
        result[i] = b[i];
    }
}

result = result.filter(function( element ) {
   return element !== undefined;
});

console.log(result);
1
Jorge Londoño

var arr1 = [NaN, 0, 15, false, -22, '', non défini, 47, null];

var array1 = arr1.filter (fonction (e) {return e;});

document.write (array1);

simple ligne ans

0
vishal