我們首先來看一下這個函式的原始碼,原始碼如下所示:
首先我們來說一下這個函式的作用,它的作用就是獲取乙個陣列的切片;所謂切片,就是指數組的一部分連續元素,當然也可以是陣列的全部元素。我們這時可能想到了陣列本身就有乙個/**
* 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...