Lodash源碼分析-compact.js

前言

此方法沒有對其餘方法進行引用數組

正文

源代碼

/**
 * 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
複製代碼

解析

參數

該方法接受一個數組做爲參數源碼分析

返回值

該方法返回一個數組post

方法解析

該方法首先會聲明一個初始值爲0的局部變量resIndex和一個初始值是一個空數組[]的局部變量resultspa

以後先判斷傳入的參數是不是一個空數組,若爲空,直接將上一步聲明的空數組result返回給調用該方法的地方,不然繼續執行下一步。code

接下來遍歷傳入的數組參數,遍歷過程當中若當前的值爲真,將其push入以前聲明的局部變量數組result。遍歷結束後,將result數組返回給調用該方法的地方。ip

注: 該方法沒有對傳入的參數進行類型判斷,但當傳入的參數爲nullundefined時會被視爲空數組或空變量而直接返回空數組;而當傳入字符串時,會將字符串視爲一個由一個個字符組成的數組進行遍歷操做,最後會返回一個由拆成一個個字符組成的數組;傳入其餘類型的值則會直接拋出一個錯誤,由於其餘類型的值不可被遍歷操做。rem

示例

compact([1, undefined, 2, null, NaN, 3, false, "null"])
--> [1, 2, 3, "null"]
compact(null)
--> []
compact(undefined)
--> []
compact("I love Javascript!")
--> ["I", " ", "l", "o", "v", "e", " ", "J", "a", "v", "a", "s", "c", "r", "i", "p", "t", "!"]
compact(3)
--> Uncaught TypeError: array is not iterable
compact({a: 1, b: 2, c: 3})
--> Uncaught TypeError: array is not iterable
compact(true)
--> Uncaught TypeError: array is not iterable
複製代碼

總結

該方法傳入一個數組,返回一個由舊數組中的真值組成的新數組。字符串

相關連接:

每日源碼分析 - lodash(after.js)get

每日源碼分析 - lodash(chunk.js)源碼

每日源碼分析 - lodash(castArray.js)

本文章來源於午安煎餅計劃Web組 - 殘陽

相關文章
相關標籤/搜索