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)?
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.
Inline à l'aide de lambda
result.filter(item => item);
Vous pouvez utiliser la méthode lodash compact
, qui supprime null
, undefined
et ''
_.compact(data)
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/
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);
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