Lodash源码分析-fromPairs.js

前言

本系列使用 lodash 4.17.4版本

此方法没有对其他方法进行引用

正文

源代码

/**
 * The inverse of `toPairs`is method returns an object composed
 * from key-value `pairs`.
 *
 * @since 4.0.0
 * @category Array
 * @param {Array} pairs The key-value pairs.
 * @returns {Object} Returns the new object.
 * @example
 *
 * fromPairs([['a', 1], ['b', 2]])
 * // => { 'a': 1, 'b': 2 }
 */
function fromPairs(pairs) {
  const result = {}
  if (pairs == null) {
    return result
  }
  for (const pair of pairs) {
    result[pair[0]] = pair[1]
  }
  return result
}

export default fromPairs
复制代码

解析

参数

该方法接受一个将被转换为对象的二维数组。

返回值

该方法返回一个对象。

方法解析

1.该方法会首先定义一个result空对象。

2.该方法会判断传入的参数是否为空数组,若为空数组则会直接将result空对象返回给调用该方法的地方;若不为空继续下一步。

3.该方法会对传入的二维数组进行遍历操作,在遍历中,将二维数组下的每个一维数组的第一项转换为字符串作为对象的属性,第二项作为对象的属性值,组成一对键值对赋给之前定义的result对象。遍历操作结束后,将result对象返回给该方法调用的地方。

注: 该方法没有对传入的参数进行类型判断。

  • 当传入的参数为nullundefined时会被视为空数组或空变量而直接将空对象result返回给调用的地方;
  • 当传入一维数组时,因为一维数组下没有数组的前两项来组成键值对赋给对象,所以会产生一个undefine: undefined键值对赋值给对象;
  • 而当传入字符串时,会将字符串视为一个由一个个字符组成的数组进行遍历操作,而每个字符又会被视为一个只有一项值为字符的数组,这样在遍历过程中便会把每个字符作为属性,undefined作为属性值赋值给对象;
  • 传入其他类型的值则会直接抛出一个错误,因为其他类型的值不可被遍历操作。
  • 若传入的二维以上高于二维的数组时,在遍历组成键值对给对象赋值的过程中,会将低一维的数组的第一项转换为字符串来作为属性。如传入三维数组后,在遍历过程中会将其下每个二维数组的第一项转换为字符串作为属性,第二项不变作为属性值来组成键值对赋值给数组。

注: 当传入的二维数组下的一维数组值不足两个,不足的会以undefined代替,超过两个的会被无视。

注: 当传入的二维数组下的一维数组值不足两项时,不足的项会以undefined代替,超过两项的项会被无视。

示例
fromPairs([[3, 1], [6, 5]]);
--> {'3': 1, '6': 5}
fromPairs([[5, 3, 6], [2]])
--> {2: undefined, 5: 3}
fromPairs([[[5, 3, 6], [2]], [[2, 7], [1, 8]]])
--> {5,3,6: Array(1), 2,7: Array(2)}
fromPairs("DrMoon");
--> {D: undefined, r: undefined, M: undefined, o: undefined, n: undefined}
fromPairs(5);
--> Uncaught TypeError: pairs is not iterable
fromPairs(true);
--> Uncaught TypeError: pairs is not iterable
fromPairs(null);
--> null
fromPairs(undefined);
--> undefined
复制代码
总结

该方法会将传入的二维数组转换为一个对象,二维数组下每个一维数组的前两项组成一对键值对作为对象的属性与属性值。

相关链接:

每日源码分析 - lodash(debounce.js和throttle.js)

lodash源码分析(create.js)

每日源码分析 - Lodash(remove.js)

本文章来源于午安煎饼计划Web组 - 残阳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值