Lodash學習筆記 - compact函數

百忙之中(閒來無事)想抽點時間好好讀一下源碼,因而就選了Lodash來寫一個系列罷。讀源碼順序就按照loadsh文檔順序來。javascript

文檔地址:中文文檔   英文文檔
源碼地址:gayhubcss


_.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

clipboard.png

能夠看到使用filter更快,若是沒有兼容性需求,仍是使用es5原生函數比較好。github

至於filter比較快的緣由,猜想是chrome排序算法致使的,之後有空時間我會看一波源碼再來補充這篇blog算法


clipboard.png

相關文章
相關標籤/搜索