簡體   English   中英

如何在_.every下划線js重新實現中_.reduce工作

[英]How to does _.reduce work in _.every underscore js re-implementation

我一整天都對 _.reduce 在這里的工作方式感到困惑。

 _.every = function(collection, iterator) { var check = iterator || _.identity; var result = _.reduce(collection, function(accumulator, val) { return accumulator && !!check(val); }, true); return result; }; console.log(_.every([true, false, 1, 2, 3, 4], _.identity)); // ===> false

因此,據我了解 _.reduce 它遍歷集合,並且對於每個元素,在數組中的每個元素上調用迭代器(累加器,val),然后返回累加器,但我不明白第 4 行在做什么: 返回累加器 && !!check(val);。 為什么它不檢查 false,將其設置為累加器,然后檢查 1 並將其設置為累加器,然后移動到數組的其余部分,直到它達到 4,這意味着最后一個累加器為真? 對不起,如果這沒有意義。

.every基本上是一個復合&& 其結果只能是true ,如果每一個元素也導致true

所以在這行代碼...

return accumulator && !!check(val);

... accumulator是到目前為止的值。

如果 accumulator 為true ,那么到目前為止一切都很好。 它將調用check數組的當前元素,將結果轉換為布爾值,然后返回。 返回值成為下一步的accumulator

如果 accumulator 為false ,那是因為數組中較早的部分返回了false 這意味着我們已經失敗了,沒有必要繼續檢查數組的其余部分。 即使數組后面的內容返回true也沒關系。 因此這個表達式將返回false ,甚至不會調用check

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM