lodash里的toLength和toPairs方法详解

lodash里的toLength和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的资料请关注易知道(ezd.cc)其它相关文章!

推荐阅读