Javascript 强调如何共享相同的回调

Javascript Underscore how to share identical callbacks

是否可以共享相同的回调?我如何将 _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);
  }

我建议重组您的 predicate 功能,像这样

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

然后在将 _id 的值传递给 findfindIndex 时像这样绑定

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函数。