此方法没有对其余方法进行引用数组
/**
* 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组 - 残阳