基本用法
创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, "", undefined, 和 NaN 都是被认为是“假值”。
var arrayList=[1,2,3,4,5,6,7,null,undefined,false.null,0,'',NaN];
console.log(arrayList);
// [1, 2, 3, 4, 5, 6, 7, null, undefined, undefined, 0, "", NaN]
console.log(_.compact(arrayList)); //[1, 2, 3, 4, 5, 6, 7]
源代码
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
}
很简单的逻辑,如果数组==null返回空数组,然后在用for of 循环输出
这个时候想到一个问题测试测试while循环,map,和for of的速度
第一个
function compactUseWhile(array) {
console.time()
// 判断array是否为空
if (array == null) {
return [];
}
let result = [];
let index = 0;
let resIndex = 0;
let value;
const length = array.length;
while (index < length) {
value = array[index];
if (value) {
result[resIndex++] = value;
}
index++;
}
console.timeEnd()
return result
}
第二个map
function compactUseMap(array) {
console.time()
let resIndex = 0
const result = []
if (array == null) {
return result
}
array.map((item) => {
if (item) {
result[resIndex++] = item
})
console.timeEnd()
return result
}
var arrayList = [1, 2, 3, 4, 5, 6, 7, null, undefined, false.null, 0, '', NaN];
for (let index = 0; index < 8000000; index++) {
arrayList.push(index)
}
console.log('for of ',this.compact(arrayList));
console.log('map',this.compactUseMap(arrayList));
console.log('while',this.compactUseWhile(arrayList));
最终这样测试,测试下来发现map是最慢的
image.png
image.png
image.png