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