Как удалить значения undefined из массива, но сохранить 0 и null

В javascript я хочу удалить значения undefined, но сохраняю значения 0 и null из массива.

[ 1, 2, 3, undefined, 0, null ]

Как я могу сделать это чисто?

Ответы

Ответ 1

Вы можете использовать _.compact(array);

Создает массив со всеми удаленными значениями Falsey. Значения false, null, 0, "", undefined и NaN являются ложными.

Смотрите: https://lodash.com/docs/4.15.0#compact.

Ответ 2

Лучший способ использования lodash - _. без

Пример:

const newArray = _.without([1,2,3,undefined,0,null], undefined);

Ответ 3

Нет необходимости в библиотеках с современными браузерами. фильтр встроен

    var arr = [ 1, 2, 3, undefined, 0, null ];
    var updated = arr.filter(function(val){ return val!==undefined; });
    console.log(updated);

Ответ 4

С lodash вы можете сделать просто:

var filtered = _.reject(array, _.isUndefined);

Если вы также хотите отфильтровать как null так и undefined в какой-то момент:

var filtered = _.reject(array, _.isNil);

Ответ 5

Используя lodash, удалите из массива только значения undefined:

var array = [ 1, 2, 3, undefined, 0, null ];

_.filter(array, function(a){ return !_.isUndefined(a) }
--> [ 1, 2, 3, 0, null ]

Или, ниже будут удалены значения undefined, 0 и null:

_.filter(array)
--> [1, 2, 3]

И если вы хотите удалить значения из null и undefined из массива, но сохраните значения равными 0:

_.filter(array, function(a){ return _.isNumber(a) || _.isString(a) }
[ 1, 2, 3, 0 ]

Ответ 6

Вы можете попробовать это.

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

Ответ 7

Решение Vanilla JS: используя ===, вы можете проверить, является ли значение на самом деле undefined и не falsy.

Оба фрагмента ниже приведут вам массив с [1, 2, 3, 0, null].

Оба изменяют исходный массив.

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

Ответ 8

Фильтруйте данный массив для элементов, не равных неопределенному.

const initialArray = [ 1, 2, 3, undefined, 0, null ];
const finalArray = initialArray.filter(element => element !== undefined);

Ответ 9

const finalArray = initialArray.filter(i => Boolean(i))

Ответ 10

С помощью метода фильтра ES6 Array #

array.filter(item => item !== undefined)