从数组中删除未定义的值

9 浏览
0 Comments

从数组中删除未定义的值

在某些情况下,数组结构中可能会出现undefined或通常为假值的情况。例如,在从某些未知来源(如数据库或HTML结构)读取和填充数据时。例如:

var data = [42, 21, undefined, 50, 40, undefined, 9]

由于在循环遍历此类数组并对元素进行操作时可能会引发问题,那么删除undefined(假值)的最佳实践是什么?

0
0 Comments

问题的出现原因是需要从一个数组中移除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中是否也适用?我尝试了但失败了。

0
0 Comments

问题的原因是需要从数组中移除未定义的值。解决的方法是使用过滤器(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是最差的,因为输入和操作都不再明确。此外,它看起来像是在过滤布尔值,这绝对不是它的作用。

0
0 Comments

在处理数组时,有时会遇到需要移除数组中的未定义值的情况。对于这个问题,可以使用lodash库中的compact方法来解决。该方法可以移除数组中的nullundefined''三种类型的值。下面是使用该方法的示例代码:

_.compact(data)

然而,使用lodash库需要引入另一个库,这可能会增加项目的复杂度和依赖。因此,有人认为这是一种过度解决方法。不过,这个方法可以有效地清理数组,因此仍然是我个人偏好的解决方案。

0