react - lodash vs underscore
Cómo eliminar valores no definidos de la matriz pero mantener 0 y nulo (8)
Con lodash , puedes hacer simplemente:
var filtered = _.reject(array, _.isUndefined);
Si también quiere filtrar null
y undefined
en algún momento:
var filtered = _.reject(array, _.isNil);
En javascript, quiero eliminar valores no definidos, pero mantener los valores 0 y nulos de una matriz.
[ 1, 2, 3, undefined, 0, null ]
¿Cómo puedo hacerlo limpiamente?
Filtra la matriz dada para elementos que no sean iguales a indefinidos.
const initialArray = [ 1, 2, 3, undefined, 0, null ];
const finalArray = initialArray.filter(element => element !== undefined);
La mejor manera de usar lodash es _.without
Ejemplo:
const newArray = _.without([1,2,3,undefined,0,null], undefined);
No hay necesidad de bibliotecas con navegadores modernos. filter está integrado en.
var arr = [ 1, 2, 3, undefined, 0, null ];
var updated = arr.filter(function(val){ return val!==undefined; });
console.log(updated);
Puedes probar este.
var array = [ 1, 2, 3, undefined, 0, null ];
var array2 = [];
for(var i=0; i<array.length; i++){
if(!(typeof array[i] == ''undefined'')){
array2.push(array[i]);
}
}
console.log(array2);
Puedes usar _.compact(array);
Crea una matriz con todos los valores de falsey eliminados. Los valores false, null, 0, "", undefined y NaN son falsey.
Consulte: https://lodash.com/docs/4.15.0#compact
Solución de JS de vainilla: Al utilizar ===
, puede verificar si el valor es realmente undefined
y no es falsy
.
Los dos fragmentos siguientes le darán una matriz con [1, 2, 3, 0, null]
.
Ambos modifican la matriz original.
// one liner - modifies the array in-place
[ 1, 2, 3, undefined, 0, null ].forEach( function(val, i, arr){
if(val===undefined){arr.splice(i,1)}; // remove from the array if actually undefined
});
// broken up for clarity - does the same as the above
var myarray = [ 1, 2, 3, undefined, 0, null ];
myarray.forEach( function(val, i, arr){
if(val===undefined){arr.splice(i,1)};// remove from the array if actually undefined
});
console.log(myarray );
Usando lodash, lo siguiente elimina solo los valores indefinidos de la matriz:
var array = [ 1, 2, 3, undefined, 0, null ];
_.filter(array, function(a){ return !_.isUndefined(a) }
--> [ 1, 2, 3, 0, null ]
O, lo siguiente eliminará los valores indefinidos, 0 y nulos:
_.filter(array)
--> [1, 2, 3]
Y si desea eliminar valores nulos e indefinidos de la matriz, pero mantenga los valores iguales a 0:
_.filter(array, function(a){ return _.isNumber(a) || _.isString(a) }
[ 1, 2, 3, 0 ]