lodash 基础篇 compact

基本用法
创建一个新数组,包含原数组中所有的非假值元素。例如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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容