我有一个相当长的函数,目前我需要该函数的副本,唯一的区别是它要求大于而不是小于。所以唯一的区别是 > 或 <。
是否有任何(非困惑)方法可以使这种函数只是一个函数而不是这里的两个函数?
function(value, modifier) {
let result;
if (value > modifier) result = 10;
return result;
}
function(value, modifier) {
let result;
if (value < modifier) result = 10;
return result;
}
所以基本上我需要一个条件大于/小于号。
编辑:要明确的是,在理想的世界中我想这样做:
myFunction(10, 5, >)
编辑:添加我的实际功能的一部分以使事情更清晰。我希望可能有真正简单的方法来做到这一点,但看起来也许不是,所以也许实际功能的一部分可能会有所帮助:
function getEdges(colour) {
for (let x = 0; x < width; x++) {
for (let y = height - 1; y >= 0; y--) {
const data = getData(x,y);
if (data[0] < colour) {
edge.push(y);
break;
}
}
}
return edge;
}
还有另一个与此几乎相同的函数,唯一的区别是行 if (data[0] > color) {
大于而不是小于。
最佳答案
如果两个函数之间的唯一区别是比较,那么您可以提取它并将其作为参数
function getEdges(colour, comparator) {
for (let x = 0; x < width; x++) {
for (let y = height - 1; y >= 0; y--) {
const data = getData();
if (comparator(data[0], colour)) {
edge.push(y);
break;
}
}
}
return edge;
}
//call with less than
getEdges(someColour, (a, b) => a < b)
//call with greater than
getEdges(someColour, (a, b) => a > b)
您还可以将逻辑保留在一个函数中,并从中派生出另外两个函数。这样您就不需要维护多个代码块,并且仍然会得到两个显式调用:
使用 .bind
的部分应用:
function getEdges(comparator, colour) {
// ^ ^ the two parameters are swapped
for (let x = 0; x < width; x++) {
for (let y = height - 1; y >= 0; y--) {
const data = getData();
if (comparator(data[0], colour)) {
edge.push(y);
break;
}
}
}
return edge;
}
//partial application
const getEdgesLessThan = getEdges.bind(null, (a, b) => a < b);
const getEdgesGreaterThan = getEdges.bind(null, (a, b) => a > b);
getEdgesLessThan(someColour)
getEdgesGreaterThan(someColour)
function getEdges(comparator) {
// ^---------
return function(colour) {// | taking two parameters
// ^ ----------
for (let x = 0; x < width; x++) {
for (let y = height - 1; y >= 0; y--) {
const data = getData();
if (comparator(data[0], colour)) {
edge.push(y);
break;
}
}
}
return edge;
}
}
//currying
const getEdgesLessThan = getEdges((a, b) => a < b);
const getEdgesGreaterThan = getEdges((a, b) => a > b);
getEdgesLessThan(someColour)
getEdgesGreaterThan(someColour)
关于javascript - JS函数在大于或小于之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56649385/