说我想使用reduce
添加一系列数字:
[1,2,3].reduce((all, current) => all + current, 0)
是否有任何内置(我知道我可以编写一个辅助函数来执行此操作)方式将+
运算符作为适用函数传递? E.g:
[1,2,3].reduce(+, 0)
我知道上面的JS不是有效的,但我希望它能说明我想要实现的目标。
答案 0 :(得分:1)
没有像这样的内置功能。</ strong>
这完全是一个黑客,可能会取代原生的reduce
功能。
Array.prototype.reduce = function (operator, inital) {
// Assuming operator is always = "+"
// You need to implement your versions for subtraction, multiplication etc may be using a switch case
var sum = inital;
this.forEach(elem => { sum += elem });
return sum;
}
console.log([1, 2, 3, 4].reduce("+", 0))
// 10
console.log([1, 2, 3, 4].reduce("+", 10))
// 20
答案 1 :(得分:1)
不,不存在此类符号。但你可以按照你的指示自己写一下:
const Operator = { plus: (a, b) => a+b };
//...reduce(Operator.plus, 0)
你问题的答案很简单:不。
答案 2 :(得分:1)
const op = k => {
"+": (a,b) => a + b,
"-": (a,b) => a - b,
"/": (a,b) => a / b,
"*": (a,b) => a * b
}[k];
所以你可以这样做:
[1,2,3].reduce(op("+"))
(这里不需要起始值)
Reduce可以包含在另一个函数中以进一步缩短它:
const reduce = (arr, o,s) => arr.reduce(typeof o === " function" ? o : op(o), s);
所以你可以这样做:
reduce([1,2,3,4],"+");
答案 3 :(得分:0)
这适用于使用Lodash的人。
您可以将_.multiply
,_.add
,_.subtract
和_.divide
功能与Array.reduce
一起使用。
以下是一个例子:
function calculate(operand, elements) {
return _.first(elements.reduce((acc, cur) => _.chunk(acc.concat(cur), 2).map(c => _[operand].apply(null, c)), []));
}
// Then
calculate('add', [1,2,3,4,5]); // 15