首頁 > 軟體

lodash裡的toLength和toPairs方法詳解

2022-08-24 14:02:06

正文

本篇章我們將認識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的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com