Javascript Underscore 如何共享相同的回调

标签 javascript closures underscore.js

是否可以共享相同的回调?我如何将 _id 作为第二个参数传递给回调?

例如

function getEntry(_id) {

    if (_id === undefined) {
        return false;
    }
    return _(this.scope[this.key]).find(function(entry) {
        return entry._id === _id;
    });
}

function getEntryIndex(_id) {
    if (_id === undefined) {
        return false;
    }
    return _(this.scope[this.key]).findIndex(function(entry) {
        return entry._id === _id;
    });
}

我想做的是为 findIndex 和 find 创建一个回调 - 例如谓词 - 因为它们正在执行相同的任务,但如何将 _id 传递给谓词?

  function predicate(entry, _id) {
      return entry._id === _id;
  }

  function getEntry(_id) {

      if (_id === undefined) {
          return false;
      }
      return _(this.scope[this.key]).find(predicate);
  }

  function getEntryIndex(_id) {
      if (_id === undefined) {
          return false;
      }
      return _(this.scope[this.key]).findIndex(predicate);
  }

最佳答案

我建议重构您的谓词函数,如下所示

function predicate(_id, entry) {
    return entry._id === _id;
}

然后在将 _id 的值传递给 findfindIndex 时绑定(bind)它,如下所示

return _(this.scope[this.key]).find(_.partial(predicate, _id)).value();
....
return _(this.scope[this.key]).findIndex(_.partial(predicate, _id)).value();

请注意.value()最后打电话。这将给出返回的实际值。

<小时/>

事实上,您可以重构代码以仅使用一个 getEntry 函数,如下所示

function predicate(_id, entry) {
    return entry._id === _id;
}

function getEntry(func, _id) {
    if (_id === undefined) {
        return false;
    }
    return _[func](this.scope[this.key], _.partial(predicate, _id));
}

getEntry('find', 1);
getEntry('findIndex', 1);

在这里,我们选择要使用参数 func 调用的函数,然后使用 _.partial 创建一个新函数。它将 _id 参数应用于 predicate 函数。

关于Javascript Underscore 如何共享相同的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387410/

相关文章:

javascript - 什么时候使用 _.bind 与 _.bindAll?

javascript - 用JS从数千个地方获取数字

javascript - Highcharts:在图例中显示堆叠图表的最后一个值

javascript - 如何通过 jquery 提交时使用 onclick 事件验证 ajax 表单?

javascript - 我的函数无法访问其父闭包并且缺少变量。如何?

python - 闭包:什么是好的用例示例?为什么不是仿函数?它值得负面影响吗?

javascript - 没有获取正确的 url 问题

javascript - 渲染 Backbone.js View ,模型中未定义模板变量

javascript - Jquery post > 成功不触发

objective-c - 在 Swift 中使用 Objective-C 代码块