如何通过避免在JavaScript中重复创建这样的函数来编写此代码段的更多功能?只是为了给出一个上下文,我试图找到从当前值到最终值的移动是否已经实现。if (deltaValue > 0) {
maxPossibleValue = function(current, final) {
return current > final ? final : current;
}
} else {
maxPossibleValue = function(current, final) {
return current < final ? final : current;
}
}
如果移动朝向更高值则为正,如果朝向更低值则为负。
<
假设JavaScript中存在>
和lt
作为函数,gt
和predicate
,我可以使用lt
的单个函数对此进行评估是gt
和maxPossibleValue = function(predicate) {
return function(c, f) {
return predicate(c, f) ? c : f }
}
处理更高阶函数。但是JS中本身没有这样的函数,上面的方法是唯一的方法吗?
{{1}}
这可以被认为只是模板化所需的谓词函数并返回一个新函数。我在Scheme中看到了这样的模式。
答案 0 :(得分:2)
我认为没有理由为什么答案应该比这更难以理解
function calculateValue(delta, final, current) {
return (delta > 0 ? Math.min : Math.max)(final, current);
}
calculateValue(-1, 5, 10); // 10
calculateValue(1, 5, 10); // 5
答案 1 :(得分:1)
您已经有了满足您要求的机制Math.min
和Math.max
。
代码如下所示,但maxPossibleValue
具有误导性
var maxPossibleValue = function (predicate) {
return function (c, f) {
return predicate(c, f)
}
},
comparer = maxPossibleValue(deltaValue > 0 ? Math.min : Math.max);
工作示例:
var deltaValue = -1;
var maxPossibleValue = function (predicate) {
return function (c, f) {
return predicate(c, f)
}
},
comparer = maxPossibleValue(deltaValue > 0 ? Math.min : Math.max);
document.write(comparer(2, 8));