_.compact(array)
每天更新一个lodash方法源码解析
compact翻译过来表示紧凑的、紧密的;在lodash中,它用于将数组中虚假值过滤掉,虚假值表示该值为空或者无意义,虚假值都包括:false
、null
、0
、" "
、undefined
、NaN
,与其对应的是真值,表示该值有意义,compact方法就是将上面所提到的虚假值过滤掉。
example:
_.compact([1, 0, true, false, 'a', null, {}, '', [], undefined, 'ok', NaN])
// [1, true, 'a', {}, [], 'ok']
源码解析:
// 过滤数组中的虚假值,虚假值包括:false、null、0、""、undefined、NaN
function compact(array) {
let resIndex = 0
// 定义result,一个空的数组
const result = []
// 如果array为null,直接返回一个空数组
if (array == null) {
return result
}
// 遍历数组array,判断数组中的每个元素是否为真值(转换成布尔值类型后是否为true,如果为true,表示真值,否则为虚假值),如果是真值,则添加到result数组中
// 过滤掉虚假值的方法是根据其转换为布尔值类型后是否为true,false表示是虚假值,需要过滤掉
for (const value of array) {
// 对于非布尔值类型的会自动进行一次类型转换
if (value) {
result[resIndex++] = value
}
}
// 最后返回结果result
return result
}
实现思路:遍历数组,对数组中每个元素进行一个真值判断(非布尔值类型的会自动转换成布尔值类型进行判断),只有当元素为真值时才会被添加到最终返回的数组中。
2019/6/18