falsey定义
falsey可以直译为假值,包含false
,''
,""
,null
,undefined
与NAN
这几种数据类型。
思路
第一步使用filter过滤falsey
类型的数据这一点应该很容易想到,第二步就是考虑如何将数组中每一项转化为Boolean值。
其中Boolean作为一种数据类型,同时Boolean()也是一种构造函数,可以将接收到的第一个参数转化为boolean值返回,那么第一种解法来了(idea来自freecodecomp算法篇)
const noFalsey = arr => arr.filter(Boolean)
第二种方法是通过!
手动将数值转化为boolean值
const noFalsey = arr => arr.filter(v => !!v)
6-26更新。加入lodash解决方案性能分析
第三种解决方案,来自于lodash源码(compact方法)
function compact(array) {
var index = -1,
length = array == null ? 0 : array.length,
resIndex = 0,
result = [];
while (++index < length) {
var value = array[index];
if (value) {
result[resIndex++] = value;
}
}
return result;
}
性能分析
使用['123', 0, null, NaN, undefined]
这个长度为5的数组做测试,三种解决方案耗时如下
- 方法一(使用Boolean构造函数) 0.034ms
- 方法二(使用!!强制类型转换) 0.205ms
- 方法三(使用lodash的compact方法) 0.080ms