本章的內容主要是:without以及很多我沒詳細記錄過的
Lodash是一個非常好用方便的JavaScript的工具庫,使得我們對數據處理能夠更加得心應手
接下來我要對Lodash的源碼進行剖析學習
每天幾個小方法,跟着我一起來學lodash吧
1、_.without(array, [values])
官方解釋:
創建一個剔除所有給定值的新數組,剔除值的時候,使用SameValueZero做相等比較。
注意: 不像 _.pull, 這個方法會返回一個新數組。
我們來看例子:
很明顯就是去除了數組中的1,2 留下了3這個元素
接下來看源碼:
var without = baseRest(function(array, values) {
//isArrayLikeObject用於判斷array是不是數組
//baseDifference用於去除元素
return isArrayLikeObject(array)
? baseDifference(array, values)
: [];
});
module.exports = without;
具體的difference的源碼解釋可以看我的文章:
JavaScript實用庫:Lodash源碼數組函數解析(二) difference、baseDifference、isArrayLikeObject、isArrayLike、baseRest
今天就到這裏吧
爲什麼今天就到這裏了?
相信有人發現了,有些數組的函數我沒有提到,因爲有些函數真的轉的我頭暈了,本人能力有限,所以不能全部解釋了,但是我還是將我沒提到的方法以及功能寫在下面吧:
1、_.intersection([arrays])
創建唯一值的數組,這個數組包含所有給定數組都包含的元素,使用 SameValueZero進行相等性比較。(注:可以理解爲給定數組的交集)
2、 .intersectionBy([arrays], [iteratee=.identity])
這個方法類似 _.intersection,區別是它接受一個 iteratee 調用每一個arrays的每個值以產生一個值,通過產生的值進行了比較。結果值是從第一數組中選擇。iteratee 會傳入一個參數:(value)。
3、_.intersectionWith([arrays], [comparator])
這個方法類似 _.intersection,區別是它接受一個 comparator 調用比較arrays中的元素。結果值是從第一數組中選擇。comparator 會傳入兩個參數:(arrVal, othVal)。
4、_.pull(array, [values])
移除數組array中所有和給定值相等的元素,使用 SameValueZero 進行全等比較。
注意: 和 _.without 方法不同,這個方法會改變數組。使用 _.remove 從一個數組中移除元素。
5、_.pullAll(array, values)
這個方法類似_.pull,區別是這個方法接收一個要移除值的數組。
Note: 不同於 _.difference, 這個方法會改變數組 array。
6、.pullAllBy(array, values, [iteratee=.identity])
這個方法類似於_.pullAll ,區別是這個方法接受一個 iteratee(迭代函數) 調用 array 和 values的每個值以產生一個值,通過產生的值進行了比較。iteratee 會傳入一個參數: (value)。
Note: 不同於 _.differenceBy, 這個方法會改變數組 array。
7、_.pullAllWith(array, values, [comparator])
這個方法類似於 _.pullAll,區別是這個方法接受 comparator 調用array中的元素和values比較。comparator 會傳入兩個參數:(arrVal, othVal)。
注意: 和 _.differenceWith 不同, 這個方法會改變數組 array。
8、_.pullAt(array, [indexes])
根據索引 indexes,移除array中對應的元素,並返回被移除元素的數組。
Note: 和 _.at不同, 這個方法會改變數組 array。
9、_.sortedIndex(array, value)
使用二進制的方式檢索來決定 value值 應該插入到數組中 儘可能小的索引位置,以保證array的排序。
10、.sortedIndexBy(array, value, [iteratee=.identity])
這個方法類似 _.sortedIndex ,除了它接受一個 iteratee (迭代函數),調用每一個數組(array)元素,返回結果和value 值比較來計算排序。iteratee 會傳入一個參數:(value)。
11、_.sortedIndexOf(array, value)
這個方法類似 _.indexOf,除了它是在已經排序的數組array上執行二進制檢索。
12、_.sortedLastIndex(array, value)
此方法類似於_.sortedIndex,除了 它返回 value值 在 array 中儘可能大的索引位置(index)。
13、.sortedLastIndexBy(array, value, [iteratee=.identity])
這個方法類似 _.sortedLastIndex ,除了它接受一個 iteratee (迭代函數),調用每一個數組(array)元素,返回結果和value 值比較來計算排序。iteratee 會傳入一個參數:(value)。
14、_.sortedLastIndexOf(array, value)
這個方法類似 _.lastIndexOf,除了它是在已經排序的數組array上執行二進制檢索
15、_.sortedUniq(array)
這個方法類似 _.uniq,除了它會優化排序數組
16、_.sortedUniqBy(array, [iteratee])
這個方法類似 _.uniqBy,除了它會優化排序數組。
17、_.union([arrays])
創建一個按順序排列的唯一值的數組。所有給定數組的元素值使用SameValueZero做等值比較。(注: arrays(數組)的並集,按順序返回,返回數組的元素是唯一的)
18、_.xor([arrays])
創建一個給定數組唯一值的數組,使用symmetric difference做等值比較。返回值的順序取決於他們數組的出現順序。
還有一點沒有提到,大家可以去lodash中文文檔去學習,我這裏並不全面,也不是很細緻,我只是發表一下自己的看法,同時也是希望能夠幫助到其他的人
數組的源碼解析就告一段落了,下次就開啓下一個數據類型的處理