如何在JavaScript中处理任意数量的参数时使用curry?
功能multDiv将执行以下操作: MULTIV432->4 x 3/2=6 multDiv211632->2 x 1/1 x 6/3 x 2=8如何在JavaScript中处理任意数量的参数时使用curry?,javascript,currying,Javascript,Currying,功能multDiv将执行以下操作: MULTIV432->4 x 3/2=6 multDiv211632->2 x 1/1 x 6/3 x 2=8 参数从左到右使用交替的乘法和除法求值。我不会给出代码-它绝对可行。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一个函数 我要说的是,在函数本身添加一个tap方法,在执行一系列multDiv操作后返回当前值。我不会给出代码-这是完全可行的。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一
参数从左到右使用交替的乘法和除法求值。我不会给出代码-它绝对可行。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一个函数
我要说的是,在函数本身添加一个tap方法,在执行一系列multDiv操作后返回当前值。我不会给出代码-这是完全可行的。问题是您必须在每次函数调用时返回一个函数。所以不能只返回一个数字,这个数字也是一个函数
我会说在函数本身上添加一个tap方法,在执行一系列multDiv操作后返回当前值。一种不使用curry的方法;应该能够使用currying方法返回相同的结果
function multDiv(n) {
var r = 0
, n = Array.isArray(n) ? n : Array.prototype.slice.call(arguments);
n.forEach(function(_, i, array) {
// multiply
if (i % 2 === 0) {
if (array[i + 1]) {
if (r === 0) {
r = array[i] * array[i + 1];
} else {
r *= array[i + 1]
}
}
} else {
// divide
if (array[i + 1]) {
r /= array[i + 1]
}
}
});
return r
}
// pass array or parameters; e.g., `[4,3,2]` or `4,3,2`
multDiv(4, 3, 2); // 6
multDiv([2, 1, 1, 6, 3, 2]); // 8
变量输入=document.querySelectorAllinput,
输出=document.querySelectorAlloutput;
对于var指数=0;指数<输出长度;索引++{
var args=JSON.parseinputs[index].value;
输出[index].innerHTML=multDivargs
}
函数multDivn{
var r=0,
n=Array.isArrayn?n:Array.prototype.slice.callarguments;
n、 forEachfunction,i,数组{
如果i%2==0{
if数组[i+1]{
如果r==0{
r=数组[i]*数组[i+1];
}否则{
r*=数组[i+1]
}
}
}否则{
if数组[i+1]{
r/=数组[i+1]
}
}
};
返回r
}
结果:
结果:
不使用咖喱的方法;应该能够使用currying方法返回相同的结果
function multDiv(n) {
var r = 0
, n = Array.isArray(n) ? n : Array.prototype.slice.call(arguments);
n.forEach(function(_, i, array) {
// multiply
if (i % 2 === 0) {
if (array[i + 1]) {
if (r === 0) {
r = array[i] * array[i + 1];
} else {
r *= array[i + 1]
}
}
} else {
// divide
if (array[i + 1]) {
r /= array[i + 1]
}
}
});
return r
}
// pass array or parameters; e.g., `[4,3,2]` or `4,3,2`
multDiv(4, 3, 2); // 6
multDiv([2, 1, 1, 6, 3, 2]); // 8
变量输入=document.querySelectorAllinput,
输出=document.querySelectorAlloutput;
对于var指数=0;指数<输出长度;索引++{
var args=JSON.parseinputs[index].value;
输出[index].innerHTML=multDivargs
}
函数multDivn{
var r=0,
n=Array.isArrayn?n:Array.prototype.slice.callarguments;
n、 forEachfunction,i,数组{
如果i%2==0{
if数组[i+1]{
如果r==0{
r=数组[i]*数组[i+1];
}否则{
r*=数组[i+1]
}
}
}否则{
if数组[i+1]{
r/=数组[i+1]
}
}
};
返回r
}
结果:
结果:
你能发布一些你写的代码吗?这是不可能的。它怎么知道multDiv432应该是一个数字,multDiv211是一个可以在返回数字之前接受632的函数?您应该能够使用resultmultDiv432==6和resultmultDiv211632==8这样的东西来完成。您可以发布一些您编写的代码吗?这是不可能的。它怎么知道multDiv432应该是一个数字,multDiv211是一个可以在返回数字之前接受632的函数?您应该能够使用resultmultDiv432==6和resultmultDiv211632==8这样的东西来完成它,