【问题标题】:Underscore and LoDash _.each下划线和 LoDash _.each
【发布时间】:2016-02-24 01:30:20
【问题描述】:

我正在将代码库从 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(...,测试通过了,但我担心代码库中可能存在更多潜在问题。

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

【问题讨论】:

  • elements 是什么?

标签: javascript migration underscore.js lodash


【解决方案1】:

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

这里下划线和lodash的区别是lodash使用Array.isArray来判断传递的对象的类型。另一方面,下划线仅检查函数上存在的length 属性的存在。

下划线将函数视为对象,lodash 将其视为数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多