首页 文章

下划线和LoDash _.each

提问于
浏览
0

我正在将代码库从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;
  }
}

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

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

Any ideas as to which difference between the two libraries would cause this?

1 回答

  • 0

    原来这个问题实际上是在测试代码中 . 上面, elements 在运行时是一个数组,但是取消引用Knockout可观察数组的结果 . 为测试创建的 Spy 提供了一个可观察的而不是一个数组 .

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

    Underscore将该函数视为一个Object,lodash将其视为一个Array .

相关问题