此方法沒有對其餘方法進行引用數組
/**
* 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
和一個初始值是一個空數組[]
的局部變量result
。spa
以後先判斷傳入的參數是不是一個空數組,若爲空,直接將上一步聲明的空數組result
返回給調用該方法的地方,不然繼續執行下一步。code
接下來遍歷傳入的數組參數,遍歷過程當中若當前的值爲真,將其push入以前聲明的局部變量數組result
。遍歷結束後,將result
數組返回給調用該方法的地方。ip
注: 該方法沒有對傳入的參數進行類型判斷,但當傳入的參數爲null
和undefined
時會被視爲空數組或空變量而直接返回空數組;而當傳入字符串時,會將字符串視爲一個由一個個字符組成的數組進行遍歷操做,最後會返回一個由拆成一個個字符組成的數組;傳入其餘類型的值則會直接拋出一個錯誤,由於其餘類型的值不可被遍歷操做。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
複製代碼
該方法傳入一個數組,返回一個由舊數組中的真值組成的新數組。字符串
本文章來源於午安煎餅計劃Web組 - 殘陽