下划线和LoDash _.each

时间:2016-02-24 01:30:20

标签: javascript migration underscore.js lodash

我正在将代码库从Underscore 1.8.2迁移到lodash 4.5.1。迁移后有一项测试失败。

正在测试的代码是使用_.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;
  }
}

使用应为空的数组进行测试,结果需要0underscore.each成功,但是lodash没有(返回正值)。

我将_.each(...替换为return _.sumBy(...,测试通过,但我担心代码库中可能存在更多休眠问题。

关于两个库之间的差异会导致这种情况的任何想法吗?

1 个答案:

答案 0 :(得分:0)

事实证明问题实际上在测试代码中。上面,elements在运行时是一个数组,但是取消引用Knockout可观察数组的结果。为测试创建的间谍提供了一个可观察的而不是数组。

下划线和lodash之间的区别在于lodash使用Array.isArray来确定传递的对象的类型。另一方面,下划线只检查函数中是否存在length属性。

Underscore将该函数视为一个Object,lodash将其视为一个数组。