原创 一天一個仿lodash函數實現-utils系列

貌似閒置了兩週沒寫了。 這次直接完成util系列的方法,在實現array系列的時候,開始發現一些示例用了其他utils,所以就不完全按順序來實現,而且在實現過程中發現,其實有些方法其實是另一個方法的進階使用。 這次主要實現了除match、m

原创 一天一個仿lodash函數實現-zip

前面說unzip其實就是數組轉置,那其實zip也就是逆向,那還是轉置了 導致zipObjectDeep費了點腦細胞,寫了個勉強過了官方文檔示例的實現。 function zip(...arr){ const result = [];

原创 一天一個仿lodash函數實現-xor

xor 數組類異或,其實是找出一堆數組裏面,只出現一次的元素集合。 所以在最開始實現時,我的邏輯是,所有數遍歷一次組合起來,並且記錄每個元素出現的次數,再遍歷一次全部,只把出現一次的元素丟到結果裏返回。 上述想法是可以實現,但後續要實現xo

原创 一天一個仿lodash函數實現-unzip、without

unzip是zip的逆向操作,但zip還沒實現呢,先理解一下unzip,可以理解爲二維數組的轉置吧。 without則是和pull類似,只是它返回一個新的數組。 function unzip(arr){ const result = [

原创 一天一個仿lodash函數實現-union

union將傳入的參數數組進行合併,生成一個新數組,雖然這種用map來做可能快一些吧,但不能保證元素加入的順序,所以可以考慮通過遍歷的方式,不斷從收集的數組裏查找遍歷到的元素是否存在,不存在則加入(打不過就加入)。 function uni

原创 一天一個仿lodash函數實現-tail、take

tail是很簡單的函數方法了,就是返回數組除了開頭元素外的數組。 take則是從數組中挑出指定個數的元素組成數組。 takeRight則是往後開始挑元素。 takeWhile則是根據傳入的函數來判斷,直到函數返回falsey時,結束挑選。

原创 一天一個仿lodash函數實現-uniq

uniq數組去重,只保留第一次出現的元素,也就是要保證元素的順序,剛實現的union利用數組遍歷來做,實際uniq也可以這麼搞。 function uniq(arr){ return arr.reduce((pre, cur)=>{

原创 一天一個仿lodash函數實現-sortedUniq

sortedUniq 和 uniq很像(uniq還沒講到就已經開始說sortedUniq了) 將排好序的數組去重,因爲數組本身就排序了,那就好辦了,遍歷數組,重複的元素只會是連續的,所以只要用一個變量記錄遍歷時經過的不同數,下一個遍歷只要遇

原创 一天一個仿lodash函數實現-sortedIndex

拖了一週了,上週一直在忙(其實是sortedIndex沒咋理解好) sortedIndex 從有序數組中找到指定數該插入的位置,用的是二分法的方式解決。 有兩個關鍵點:有序數組,二分法 所以實現上是這樣的: function sortedI

原创 一天一個仿lodash函數實現-remove、reverse和slice

又遇到簡單的函數實現了 remove 移除數組中命中的元素,並返回移除元素組成的數組,會改變原數組。 和pullAt有點像 function remove(arr, iteratee){ const removes = []; fo

原创 一天一個仿lodash函數實現-pull

pull 從數組中剔除指定的元素,方法會改變數組 function pull(arr, ...rest){ for(let i=0;i<arr.length;i++){ if(rest.includes(arr[i])) {

原创 一天一個仿lodash函數實現-join、last、nth、lastIndexOf

這次的幾個就更簡單了。 function join(arr, separator=",") { return arr.join(separator) } function last(arr) { return arr.length

原创 一天一個仿lodash函數實現-intersection

intersection 這個和前面寫的difference反過來,difference是求未出現過的,intersection是求出現過的,所以實現起來就比較簡單了。 function intersection(arr, ...rest)

原创 一天一個仿lodash函數實現-fromPairs、indexOf、initial

fromPairs 它是toPairs的反轉,不過現在是數組函數系列還沒走到toPairs。 它接收一個二維數組,元素是一個兩元素的數組,一個是key,一個是value 所以實現很簡單 function fromPairs(arr){

原创 一天一個仿lodash函數實現-fill、findIndex、first、head

把arr數組中從start到end(不包括end)用value填充 function fill(arr, value, start = 0, end = arr.length) { for(let i = start;i<end;i++