是否可以共享相同的回调?我如何将 _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
的值传递给 find
或 findIndex
时绑定(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/