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 < 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); // => [['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的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- lodash裡to系列之將數據轉換成數字類型實現示例
- Js中安全獲取Object深層對象的方法實例
- JavaScript前端迭代器Iterator與生成器Generator講解
- JavaScript的引用數據類型你瞭解多少
- 前端進階JS數組高級用法大全教程示例