前言
此方法沒有對其他方法進行引用
正文
原始碼
/**
* 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
複製程式碼
解析
引數
該方法接受一個陣列作為引數
返回值
該方法返回一個陣列
方法解析
該方法首先會宣告一個初始值為0的區域性變數resIndex
和一個初始值是一個空陣列[]
的區域性變數result
。
之後先判斷傳入的引數是否是一個空陣列,若為空,直接將上一步宣告的空陣列result
返回給呼叫該方法的地方,否則繼續執行下一步。
接下來遍歷傳入的陣列引數,遍歷過程中若當前的值為真,將其push入之前宣告的區域性變數陣列result
。遍歷結束後,將result
陣列返回給呼叫該方法的地方。
注: 該方法沒有對傳入的引數進行型別判斷,但當傳入的引數為null
和undefined
時會被視為空陣列或空變數而直接返回空陣列;而當傳入字串時,會將字串視為一個由一個個字元組成的陣列進行遍歷操作,最後會返回一個由拆成一個個字元組成的陣列;傳入其他型別的值則會直接丟擲一個錯誤,因為其他型別的值不可被遍歷操作。
示例
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(castArray.js)
本文章來源於午安煎餅計劃Web組 - 殘陽