摘要:昨天看了方法,今天是方法。為數(shù)組的一個,為當前數(shù)組的為原數(shù)組。還是先翻源碼吧。返回了看樓下的代碼段,返回了一個。與相比,提供了一個用于遍歷迭代的函數(shù),多使用到了一個。暫時只討論為函數(shù)的情況。簡化為數(shù)組長度,為不符合條件的角標。
昨天看了drop方法,今天是dropWhile方法。
使用_.dropWhile(array, [predicate=_.identity])
創(chuàng)建一個切片數(shù)組,去除array中從起點開始到 predicate 返回假值結(jié)束部分。predicate 會傳入3個參數(shù): (value, index, array)。
value為數(shù)組的一個ele,index為當前數(shù)組的index,value為原數(shù)組。
* var users = [ * { "user": "barney", "active": false }, * { "user": "fred", "active": false }, * { "user": "pebbles", "active": true } * ]; * * _.dropWhile(users, function(o) { return !o.active; }); * // => objects for ["pebbles"] *
其實看到這我有點懵逼,不知道是開了一天會的原因么。還是先翻源碼吧。
function dropWhile(array, predicate) { return (array && array.length) ? baseWhile(array, baseIteratee(predicate, 3), true) : []; }
dropWhile返回了baseWhile,看樓下的代碼段,baseWhile返回了一個baseSlice。與drop相比,提供了一個predicate用于遍歷迭代的函數(shù),多使用到了一個baseWhile。類似于var dropWhile = (...) => baseWhile(...) => baseSlice(...)
function baseWhile(array, predicate, isDrop, fromRight) { var length = array.length, index = fromRight ? length : -1; while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} return isDrop ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); }
predicate這個參數(shù)在傳入baseWhile時,先被baseIteratee調(diào)用,我們先確認這個函數(shù)是用來做什么的。了解作者的目的。
import baseMatches from "./_baseMatches.js"; import baseMatchesProperty from "./_baseMatchesProperty.js"; import identity from "./identity.js"; import isArray from "./isArray.js"; import property from "./property.js"; /** * The base implementation of `_.iteratee`. */ function baseIteratee(value) { // Don"t store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == "function") { return value; } if (value == null) { return identity; } if (typeof value == "object") { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); }
baseIteratee這個方法留給下一篇解決。暫時只討論predicate為函數(shù)的情況。 baseIteratee會直接返回當前的傳入的predicate.
baseWhile(array, baseIteratee(predicate, 3), true) => baseWhile(array, predicate, true)
我們再繼續(xù)說baseWhile。baseWhile(array, predicate, isDrop, fromRight),從命名上來看,isDrop表示是否是drop方法,翻看其它部分,再takeWhile中也用到了baseWhile。fromRight表示順序是從右到左還是從左到右
假設(shè)我們當前fromRight為flase
我們思考如下代碼,
// now fromRight = false ,所有我們修改下代碼 var length = array.length, index = -1; while ((++index < length) && predicate(array[index], index, array)) {}
while循環(huán)如果符合條件會一直執(zhí)行下去。當前while執(zhí)行條件是(++index < length) &&predicate(array[index], index, array),也就是遍歷當前數(shù)組,然后當前數(shù)組對應(yīng)的array[i]等參數(shù)傳入predicate,一旦predicate返回fasle,就跳出當前循環(huán),執(zhí)行baseSlice。
baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) //簡化 baseSlice(array, index, length)// length為數(shù)組長度,index為不符合條件的角標。
predicate到底是什么
英文中是斷言,斷定的意思,我理解為一種判定(這里我有些模凌兩可,感覺自己不對,有朋友糾正一下么。)
predicate函數(shù)用來判定符合你預(yù)先設(shè)定的條件,它總是返回true or false.如果不符合條件,說的直接點就是返回false,在baseWhile中就返回當前的index,然后去baseSlice(array,index,end)
關(guān)于baseSlice 上一篇我已經(jīng)簡單介紹過了。鏈接
這是我自己的亂言亂語,也希望對看到的人有幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94722.html
摘要:包是開發(fā)中常用的工具包,里面有許多實用的方法,今天分析常用的一個去重方法用法源碼包可以看到,函數(shù)這邊只做了一個針對的封裝,所以繼續(xù)看源碼 lodash.js包是node開發(fā)中常用的js工具包,里面有許多實用的方法,今天分析常用的一個去重方法---uniq 用法 _.uniq([2, 1, 2]) // => [2, 1] 源碼包 // uniq.js i...
摘要:的使用形式和類似,它將中為的元素組成一個迭代器返回,如果是,則返回中所有計算為的項。用于將多個可迭代對象對應(yīng)位置的元素作為一個元組,將所有元組組成一個迭代器,并返回。 itertools 我們知道,迭代器的特點是:惰性求值(Lazy evaluation),即只有當?shù)聊硞€值時,它才會被計算,這個特點使得迭代器特別適合于遍歷大文件或無限集合等,因為我們不用一次性將它們存儲在內(nèi)存中。 ...
摘要:代碼如下所示按照正常使用習(xí)慣,操作來實現(xiàn)樣式的添加和卸載,是一貫技術(shù)手段。將幫助我們進行操作。 繼 24 個實例入門并掌握「Webpack4」(一) 后續(xù): JS Tree Shaking CSS Tree Shaking 圖片處理匯總 字體文件處理 處理第三方 js 庫 開發(fā)模式與 webpack-dev-server 開發(fā)模式和生產(chǎn)模式?實戰(zhàn) 打包自定義函數(shù)庫 九、JS Tre...
摘要:在實際的開發(fā)場景中,我們經(jīng)常需要對一組數(shù)組進行過濾,選出其中只含有正整數(shù)的值。比如接口的查詢字符串中傳入一組,該是正整數(shù)數(shù)值。有關(guān)方法的文檔可以查詢以下是源碼,使用了的語法 在實際的開發(fā)場景中,我們經(jīng)常需要對一組數(shù)組進行過濾,選出其中只含有正整數(shù)的值。比如接口的查詢字符串中傳入一組 id,該 id 是正整數(shù)數(shù)值。 有關(guān)方法的文檔可以查詢 Lodash Number.MAX_SAFE_...
閱讀 2556·2021-11-22 12:05
閱讀 3442·2021-10-14 09:42
閱讀 1675·2021-07-28 00:15
閱讀 1982·2019-08-30 11:08
閱讀 1476·2019-08-29 17:31
閱讀 920·2019-08-29 16:42
閱讀 2329·2019-08-26 11:55
閱讀 2108·2019-08-26 11:49