如何在 JavaScript 中处理任意数量的参数时进行 curry
How to curry while handling arbitrary number of arguments in JavaScript?
一个函数multDiv,它将执行以下操作:
multDiv(4)(3)(2)
--> 4 x 3/2 = 6
multDiv(2)(1)(1)(6)(3)(2)
--> 2 x 1/1 x 6/3 x 2 = 8
参数通过交替的乘法和除法从左到右进行评估。
我不会给出代码 - 这绝对是可行的。问题是您必须在每次函数调用时返回一个函数。因此,没有办法只返回一个数字,而该数字也是一个函数。
我会说在函数本身上添加一个 tap
方法,该方法将在执行一系列multDiv
操作后返回当前值。
不使用currying的方法;应该能够使用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
var inputs = document.querySelectorAll("input"),
outputs = document.querySelectorAll("output");
for (var index = 0; index < outputs.length; index++) {
var args = JSON.parse(inputs[index].value);
outputs[index].innerHTML = multDiv(args)
}
function multDiv(n) {
var r = 0,
n = Array.isArray(n) ? n : Array.prototype.slice.call(arguments);
n.forEach(function(_, i, array) {
if (i % 2 === 0) {
if (array[i + 1]) {
if (r === 0) {
r = array[i] * array[i + 1];
} else {
r *= array[i + 1]
}
}
} else {
if (array[i + 1]) {
r /= array[i + 1]
}
}
});
return r
}
<fieldset>
<input value="[4, 3, 2]" id="a" />result:
<output for="a"></output>
<br />
<input value="[2, 1, 1, 6, 3, 2]" id="b" />result:
<output for="b"></output>
</fieldset>
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- Javascript”;类“;带有参数的扩展
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 如何在 JavaScript 中处理任意数量的参数时进行 curry
- Ramda curry:如何将参数应用于多个参数
- 在不传递另一个参数的情况下调用curry函数
- 对Resig Curry示例和“参数”感到困惑对象
- 如何在未知数量的参数上curry一个函数