共计 2452 个字符,预计需要花费 7 分钟才能阅读完成。
导读 | 这篇文章主要为大家介绍了 lodash 里的 toLength 和 toPairs 方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 |
本篇章我们将认识 lodash 里的 toLength 方法和 toPairs 方法实现,同时在实现 toPairs 方法的过程中也能了解到其他封装的内部方法的实现。
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 MAX_ARRAY_LENGTH) {return MAX_ARRAY_LENGTH}
return value
}
toPairs 方法主要是创建一个 object 对象自身可枚举属性的键值对数组。这个数组可以通过_.fromPairs 撤回。如果 object 是 map 或 set,将会返回其条目。
使用如下:
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.toPairs(new Foo);
// => [['a', 1], ['b', 2]]
toPairs 方法在实现上借助内部封装的 createToPairs 工厂函数和 keys 方法实现,其中 keys 是对外导出的方法。
源码如下:
import createToPairs from './_createToPairs.js';
import keys from './keys.js';
var toPairs = createToPairs(keys);
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 作为内部方法,主要处理普通对象的 pairs 过程,通过 arrayMap 方法处理参数。
import arrayMap from './_arrayMap.js';
function baseToPairs(object, props) {return arrayMap(props, function(key) {return [key, object[key]];
});
}
arrayMap 作为内部方法,主要处理数组的映射。
function arrayMap(array, iteratee) {
var index = -1,
length = array == null ? 0 : array.length,
result = Array(length);
while (++index
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 作为内部方法,主要处理 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 方法
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)