百忙之中(閒來無事)想抽點時間好好讀一下源碼,因而就選了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算法