2016-02-24 43 views
0

我正在將代碼庫從Underscore 1.8.2遷移到lodash 4.5.1。有一次測試在遷移後失敗。Underscore和LoDash _.each

正在測試的代碼是使用_.each的遞歸求和。

function foo(elements) { 
    if (elements.isContainer()) { 
    var sum = 0; 
    _.each(elements, function(element) { 
     sum += foo(element); 
    }); 
    return sum; 
    } else { 
    return elements.someAttr ? 1 : 0; 
    } 
} 

測試以與陣列應爲空,0有望作爲結果。 underscore.each成功,但lodash沒有(返回正值)。

我用return _.sumBy(...替換了_.each(...,並通過了測試,但我擔心代碼庫中可能存在更多的休眠問題。

任何有關這兩個庫之間的差異會導致這種情況的想法?

+2

什麼是「元素」? – dandavis

回答

0

原來問題實際上是在測試代碼中。以上,elements在運行時是一個數組,但是是取消引用Knockout可觀察數組的結果。爲測試創建的間諜提供了一個observable而不是一個數組。

下劃線和lodash之間的區別在於lodash使用Array.isArray來確定傳遞的對象的類型。另一方面,下劃線只是檢查函數上存在的length屬性的存在。

下劃線被視爲一個對象的函數,lodash被視爲一個數組。