国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

lodash.js源碼-dropWhile

denson / 3668人閱讀

摘要:昨天看了方法,今天是方法。為數(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ù)說baseWhilebaseWhile(array, predicate, isDrop, fromRight),從命名上來看,isDrop表示是否是drop方法,翻看其它部分,再takeWhile中也用到了baseWhilefromRight表示順序是從右到左還是從左到右

假設(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

相關(guān)文章

  • lodash源碼分析之去重--uniq方法

    摘要:包是開發(fā)中常用的工具包,里面有許多實用的方法,今天分析常用的一個去重方法用法源碼包可以看到,函數(shù)這邊只做了一個針對的封裝,所以繼續(xù)看源碼 lodash.js包是node開發(fā)中常用的js工具包,里面有許多實用的方法,今天分析常用的一個去重方法---uniq 用法 _.uniq([2, 1, 2]) // => [2, 1] 源碼包 // uniq.js i...

    Hujiawei 評論0 收藏0
  • 高效的 itertools 模塊

    摘要:的使用形式和類似,它將中為的元素組成一個迭代器返回,如果是,則返回中所有計算為的項。用于將多個可迭代對象對應(yīng)位置的元素作為一個元組,將所有元組組成一個迭代器,并返回。 itertools 我們知道,迭代器的特點是:惰性求值(Lazy evaluation),即只有當?shù)聊硞€值時,它才會被計算,這個特點使得迭代器特別適合于遍歷大文件或無限集合等,因為我們不用一次性將它們存儲在內(nèi)存中。 ...

    godruoyi 評論0 收藏0
  • 24 個實例入門并掌握「Webpack4」(二)

    摘要:代碼如下所示按照正常使用習(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...

    hlcc 評論0 收藏0
  • lodash.js 過濾出正整數(shù)

    摘要:在實際的開發(fā)場景中,我們經(jīng)常需要對一組數(shù)組進行過濾,選出其中只含有正整數(shù)的值。比如接口的查詢字符串中傳入一組,該是正整數(shù)數(shù)值。有關(guān)方法的文檔可以查詢以下是源碼,使用了的語法 在實際的開發(fā)場景中,我們經(jīng)常需要對一組數(shù)組進行過濾,選出其中只含有正整數(shù)的值。比如接口的查詢字符串中傳入一組 id,該 id 是正整數(shù)數(shù)值。 有關(guān)方法的文檔可以查詢 Lodash Number.MAX_SAFE_...

    FrancisSoung 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<