百忙之中(闲来无事)想抽点时间好好读一下源码,因而就选了Lodash来写一个系列罢。读源码顺序就按照loadsh文档顺序来。javascript
_.compact(array)
建立一个新数组,包含原数组中全部的非假值元素。例如false, null, 0, "", undefined, 和 NaN 都是被认为是“假值”。
代码比较简单,直接上源码:java
/** * Creates an array with all falsey values removed. The values `false`, `null`, * `0`, `""`, `undefined`, and `NaN` are falsey. * * @since 0.1.0 * @category Array * @param {Array} array The array to compact. * @returns {Array} Returns the new array of filtered values. * @example * * compact([0, 1, false, 2, '', 3]) * // => [1, 2, 3] */ function compact(array) { let resIndex = 0 const result = [] if (array == null) { return result } for (const value of array) { if (value) { result[resIndex++] = value } } return result } export default compact
能够看到只是一个简单的for of
循环,而后将非真的值所有剔除,es5中的filter
也能够作到。 下面对比一下二者效率,以下图:传送门git
能够看到使用filter
更快,若是没有兼容性需求,仍是使用es5原生函数比较好。github
至于filter
比较快的缘由,猜想是chrome排序算法致使的,之后有空时间我会看一波源码再来补充这篇blog算法