应用内置的JS运算符

时间:2017-11-19 08:04:29

标签: javascript

说我想使用reduce添加一系列数字:

[1,2,3].reduce((all, current) => all + current, 0)

是否有任何内置(我知道我可以编写一个辅助函数来执行此操作)方式将+运算符作为适用函数传递? E.g:

[1,2,3].reduce(+, 0)

我知道上面的JS不是有效的,但我希望它能说明我想要实现的目标。

4 个答案:

答案 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