博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lodash源码讲解-compact函数
阅读量:5902 次
发布时间:2019-06-19

本文共 2061 字,大约阅读时间需要 6 分钟。

原文首发于

这是我们阅读源码的第3篇博客,在这篇文章里我们来学习一下Lodash的compact方法。

compact函数内部没有依赖别的函数,让我们先来看一下compact函数的。

/** * 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

首先我们先说一下这个函数的作用,这个函数接收一个数组作为参数;然后将数组中所有通过布尔转换可以变为false的值去除;从而生成一个新的数组。

那么那些值通过布尔转换会变为false呢;这些值有:0""falsenullundefinedNaN

因为这个函数比较简单,我们就不划分步骤了,直接进行讲解;首先我们初始化了两个变量,resIndex用来表示我们返回的数组的索引;result是我们新创建的一个数组,这个数组就是我们要返回的数组;接下来,如果传递的数组为空,我们直接返回一个空的数组;接下来就是使用ES6新的语法,for...of对传递的数组进行循环,将能够通过布尔转化为false的值去除,然后就获取到了我们想要的结果。

那么,接下来我们首先把这个源码部分实现一遍;虽然简单,但是还是要自己敲一遍代码的;切记不要眼高手低。是我自己又重新实现一遍的代码。

接下来我们考虑一下,如果我们不使用for...of来循环数组,而是使用数组的map方法,或者是使用while进行数组的循环;它们的效率有多大的差异?让我们来实践一下,首先是使用map方法,我们使用如下的代码来进行测试:

// 使用数组原生的map方法function compact(array) {    // 判断array是否为空    if(array == null) {        return [];    }    let result = [];    array.map((value) => {        if(value) {            result.push(value);        }    });    return result;}

再接着我们使用while进行数组的循环,使用如下的代码进行测试:

// 使用while进行数组的循环function compact(array) {    // 判断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++;    }    return result;}

我将这两个方法都添加到之前的那个例子中了,大家可以点击查看。

接下来我们就要进行性能的测试了,我写了一个测试的用例;大家可以点击查看。经过多次测试发现,使用lodash的compact方法和使用while进行数组循环的compact方法的性能都还是不错的,使用map进行数组循环的compact方法性能最差;但是使用map方法的compact方法代码量是比较少的。

性能比较的图如下图所示:

  • lodash的compact方法性能比较好的一次测试:
    lodash的compact性能更好的情况
  • 使用while进行数组循环的compact方法性能比较好的一次测试:
    使用while进行数组循环的compact方法性能比较好的情况

转载地址:http://gyupx.baihongyu.com/

你可能感兴趣的文章
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
org.springframework.util 类 Assert的使用
查看>>
更改UIView的背景
查看>>
JLNotebookView
查看>>
StackPanel
查看>>
SPUserResizableView
查看>>
UML类图示例
查看>>
sh ./ 执行区别
查看>>
宏定义(#ifndef+#define+#endif)的作用
查看>>
Prometheus安装部署以及配置
查看>>
Oracle存储过程大冒险-2存储过程常用语法
查看>>