百忙之中(无事可做),想抽点时间仔细阅读源码,于是选择了Lodash写一个系列。阅读源码的顺序按照loadsh文件的顺序。文档地址:中文文档英文文档源码地址:gayhub_.compact(array)创建一个包含原数组中所有非假值元素的新数组。例如false、null、0、""、undefined和NaN都被视为“假值”。代码比较简单,直接上传源码:/***创建一个去掉所有假值的数组。值`false`、`null`、*`0`、`""`、`undefined`和`NaN`是假的。**@since0.1.0*@categoryArray*@param{Array}array要压缩的数组。*@returns{Array}返回过滤值的新数组。*@example**compact([0,1,false,2,'',3])*//=>[1,2,3]*/functioncompact(array){letresIndex=0constresult=[]if(array==null){returnresult}for(constvalueofarray){if(value){result[resIndex++]=value}}returnresult}exportdefaultcompact可以看到只是一个简单的forofof循环,然后去掉所有非真值,在es5中过滤也可以做到。我们来对比一下两者的效率,如下图所示:传送门可以看到使用filter更快。如果没有兼容性要求,还是用es5原生函数比较好。至于为什么filter比较快,猜测是chrome排序算法导致的。以后有空再看一波源码,补上这篇博客。
