阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单介绍lodash里的toLength和toPairs方法

32次阅读
没有评论

共计 2452 个字符,预计需要花费 7 分钟才能阅读完成。

导读 这篇文章主要为大家介绍了 lodash 里的 toLength 和 toPairs 方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
正文

本篇章我们将认识 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  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);
// => [['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 
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 方法

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2452字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中