<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本篇章我們將認識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 < 0) { return 0 } 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 < length) { result[index] = iteratee(array[index], index, array); } return result; }
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方法,更多關於lodash方法toLength toPairs的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45