如何从数组中删除未定义的值但保持0和null

时间:2016-09-15 20:02:40

标签: lodash

在javascript中,我想删除未定义的值,但保留数组中的值0和null。

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

我怎样才能干净利落?

12 个答案:

答案 0 :(得分:59)

您可以使用_.compact(array);

  

创建一个删除了所有falsey值的数组。值false,null,0,"",undefined和NaN都是假的。

请参阅:https://lodash.com/docs/4.15.0#compact

答案 1 :(得分:29)

使用lodash的最佳方式是_.without

示例:

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

答案 2 :(得分:8)

不需要具有现代浏览器的库。 filter已内置。

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

答案 3 :(得分:7)

使用lodash,您可以做到:

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

如果您还希望在某个时候过滤null以及undefined

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

答案 4 :(得分:5)

使用lodash,以下内容仅从数组中删除未定义的值:

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 ]

答案 5 :(得分:0)

你可以试试这个。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

过滤给定数组,查找不等于undefined的元素。

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

使用ES6 Array#filter方法

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

答案 10 :(得分:0)

你可以使用 lodash 来做到这一点, 你可以使用 _.omitBy(object, _.isUndefined); https://lodash.com/docs/4.17.15#omitBy
在 _.isUndefined 的位置,你甚至可以使用 _.isNumber、_.isNull 和很多函数。 转到lodash webside并在搜索中搜索“is”,您可以获得函数列表。

答案 11 :(得分:0)

普通 ES6:

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