Lodash原始碼講解 slice函式

2021-09-16 12:34:55 字數 1635 閱讀 3760

我們首先來看一下這個函式的原始碼,原始碼如下所示:

/**

* creates a slice of `array` from `start` up to, but not including, `end`.

* * **note:** this method is used instead of

* [`array#slice`]( to ensure dense arrays are

* returned.

* * @since 3.0.0

* @category array

* @param array the array to slice.

* @param [start=0] the start position.

* @param [end=array.length] the end position.

* @returns returns the slice of `array`.

*/function slice(array, start, end)

// #2

start = start == null ? 0 : start

end = end === undefined ? length : end

// #3

if (start < 0)

end = end > length ? length : end

if (end < 0)

// #4

length = start > end ? 0 : ((end - start) >>> 0)

start >>>= 0

// #5

let index = -1

const result = new array(length)

while (++index < length)

return result

}export default slice

首先我們來說一下這個函式的作用,它的作用就是獲取乙個陣列的切片;所謂切片,就是指數組的一部分連續元素,當然也可以是陣列的全部元素。我們這時可能想到了陣列本身就有乙個slice方法,那我們為什麼不使用原生的陣列的那個slice方法而非要自己重新寫乙個呢?

有兩個原因:

下面我們就來好好看一下這個函式,首先這個函式需要接收三個引數,但是後兩個引數不是必須選擇的;第乙個引數是乙個陣列,可以是元素的節點集合;第二個引數表示開始擷取切片的位置,第三個引數表示的是切片擷取的截至位置,但是不包含這個數所在位置的元素。

接下來是分步驟的講解,我在相應的位置做了標記,大家看的時候可以找標記的位置,下面的講解就是按照標記的位置來的。

對了,上面我們說了要比較一下_.slice和原生的.slice方法的效能,下圖是在我的電腦上的乙個測試,大家也可以自己測試測試一下,測試的鏈結是slice-vs-slice

從上圖可以明顯的看到,_.slice方法比原生的.slice方法效能要好很多。

Lodash原始碼精讀 chunk slice

today 2021.3.12 lodash 原始碼 將陣列 array 拆分成多個 size 長度的區塊,並將這些區塊組成乙個新陣列。如果array 無法被分割成全部等長的區塊,那麼最後剩餘的元素將組成乙個區塊。function chunk array,size 1 let index 0let ...

lodash原始碼分析之Number

一 lodash版本 4.17.5 二 函式 1 clamp 1 定義 clamp number,lower upper 2 作用 返回加緊的數字。3 例子。const require lodash console.log clamp 10,1,20 輸出 10 console.log clamp ...

lodash原始碼分析之isArguments

有人命中註定要過平庸的生活,默默無聞,因為他們經歷了痛苦或不幸 有人卻故意這樣做,那是因為他們得到的幸福超過了他們的承受能力。卡爾維諾 煙雲 本文為讀 lodash 原始碼的第二十一篇,後續文章會更新到這個倉庫中,歡迎 star pocket lodash import gettag from in...