当前位置 : 主页 > 网络编程 > JavaScript >

lodash里的toLength和toPairs方法详解

来源:互联网 收集:自由互联 发布时间:2023-02-08
目录 正文 toLength toPairs createToPairs baseToParis arrayMap mapToArray setToPairs 小结 正文 本篇章我们将认识lodash里的toLength方法和toPairs方法实现,同时在实现toPairs方法的过程中也能了解到其他封装
目录
  • 正文
  • toLength
  • toPairs
    • createToPairs
      • baseToParis
      • arrayMap
      • mapToArray
      • setToPairs
  • 小结

    正文

    本篇章我们将认识lodash里的toLength方法和toPairs方法实现,同时在实现toPairs方法的过程中也能了解到其他封装的内部方法的实现。

    toLength

    toLength方法主要是将参数value转换为用作类数组对象的长度整数。

    使用如下:

    toLength(3.2)
    // => 3
    toLength(Number.MIN_VALUE)
    // => 0
    toLength(Infinity)
    // => 4294967295
    toLength('3.2')
    // => 3
    

    在实现上,toLength方法借助内部封装导出的toInteger方法,在 《 lodash里to系列之如何将数据转换成数字类型 》中,我们已经了解了toInteger方法,意在将参数转换为整数。

    实现上对于不存在的参数直接返回0,其次将参数转换为整数,小于0的返回0,大于最大数MAX_ARRAY_LENGTH返回最大数,该方法返回的整数范围为[0,4294967295]。

    源码如下:

    import toInteger from './toInteger.js'
    const MAX_ARRAY_LENGTH = 4294967295
    function toLength(value) {
      if (!value) {
        return 0
      }
      value = toInteger(value)
      if (value < 0) {
        return 0
      }
      if (value > MAX_ARRAY_LENGTH) {
        return MAX_ARRAY_LENGTH
      }
      return value
    }
    

    toPairs

    toPairs方法主要是创建一个object对象自身可枚举属性的键值对数组。这个数组可以通过_.fromPairs撤回。如果object 是 map 或 set,将会返回其条目。

    使用如下:

    function Foo() {
     this.a = 1;
     this.b = 2;
    }
    Foo.prototype.c = 3;
    _.toPairs(new Foo);
    // =&gt; [['a', 1], ['b', 2]]
    

    toPairs方法在实现上借助内部封装的createToPairs工厂函数和keys方法实现,其中keys是对外导出的方法。

    源码如下:

    import createToPairs from './_createToPairs.js';
    import keys from './keys.js';
    var toPairs = createToPairs(keys);
    

    createToPairs

    createToPairs方法是内部方法,充当对象pairs过程的工厂函数,实现上,先通过getTag获取对象的数据类型标签,对于Map对象返回mapToArray调用结果,对于Set对象返回setToPairs调用结果,其他对象类型直接返回baseToPairs调用结果。

    import baseToPairs from './_baseToPairs.js';
    import getTag from './_getTag.js';
    import mapToArray from './_mapToArray.js';
    import setToPairs from './_setToPairs.js';
    var mapTag = '[object Map]',
        setTag = '[object Set]';
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }
    

    baseToParis

    baseToParis作为内部方法,主要处理普通对象的pairs过程,通过arrayMap方法处理参数。

    import arrayMap from './_arrayMap.js';
    function baseToPairs(object, props) {
      return arrayMap(props, function(key) {
        return [key, object[key]];
      });
    }
    

    arrayMap

    arrayMap作为内部方法,主要处理数组的映射。

    function arrayMap(array, iteratee) {
      var index = -1,
          length = array == null ? 0 : array.length,
          result = Array(length);
      while (++index < length) {
        result[index] = iteratee(array[index], index, array);
      }
      return result;
    }
    

    mapToArray

    mapToArray作为内部方法,主要处理Map对象转换数组,实现上通过遍历获取。

    function mapToArray(map) {
      var index = -1,
          result = Array(map.size);
      map.forEach(function(value, key) {
        result[++index] = [key, value];
      });
      return result;
    }
    

    setToPairs

    setToPairs作为内部方法,主要处理Set对象转换数组,实现上通过遍历获取。

    function setToPairs(set) {
      var index = -1,
          result = Array(set.size);
      set.forEach(function(value) {
        result[++index] = [value, value];
      });
      return result;
    }
    

    小结

    本篇章我们通过了解toLength方法和toPairs方法的实现,同时也认识了如处理map和set向数组的转化,以及普通对象转换数组的baseToPairs方法,更多关于lodash方法toLength toPairs的资料请关注易盾网络其它相关文章!

    网友评论