从数组中删除未定义的值
问题的出现原因是需要从一个数组中移除undefined值,解决方法是使用Array.prototype.filter方法和Boolean构造函数或Number构造函数作为回调函数来过滤数组。具体代码如下:
var data = [42, 21, undefined, 50, 40, undefined, 9]; data = data.filter(function( element ) { return element !== undefined; }); // 或者 data = data.filter( Boolean ); // 或者 data = data.filter( Number );
这些方法都可以移除数组中的undefined值。需要注意的是,使用filter(Number)也会移除0。使用filter(Boolean)也会移除false这样的假值。
使用Boolean构造函数作为回调函数,它会将真值转换为true,将假值转换为false,所以这是一个非常简洁的选项。
需要注意的是,filter(Number)也会移除0。如果数组中存在false这样的假值,使用filter(Boolean)也会将其移除。
如果你在心里默默说了一句"...damn...",那么你就和我一样是个书呆子!
有人可能会困惑,所以:回调函数接收元素作为参数,这意味着filter(Boolean)和filter((elem)=>Boolean(elem)是一样的。
这个方法在IE 11中也解决了我的问题。之前我使用箭头函数来移除undefined。
这个方法可以简化为.filter(n=>n!==undefined)。
关于接口和自定义类型在TypeScript中是否也适用?我尝试了但失败了。
问题的原因是需要从数组中移除未定义的值。解决的方法是使用过滤器(filter)函数来过滤出数组中不为未定义的值。
其中,使用lambda表达式的解决方法是result.filter(item => item);
,这将移除所有的假值。但是,如果要移除的是未定义的值,应该使用result.filter(item => item !== undefined)
。
另外,[true,false,undefined,null,'a',1,0,'0'].filter(x=>x)
将返回[true, "a", 1, "0"]
。
某些情况下filter(Boolean)
或filter(item => !!item)
这两种方法,但是有人认为它们并不比之前的方法更好。实际上,在这三种方法中,filter(item => !!item)
是最好的,因为它清楚地表达了你正在根据item的真值进行过滤。而Boolean
是最差的,因为输入和操作都不再明确。此外,它看起来像是在过滤布尔值,这绝对不是它的作用。