Yotam Salmon Yotam Salmon - 5 months ago 7
Javascript Question

Variable containing an operator in Javascript



I'm trying to make a change to a variable using a custom operator (I will explain it clearlier now).

I have an array of numbers, and I have to

reduce()
it. First 2 numbers will be added, then in the second reducing they will be substracted, then multiplied, divided and exponentiated. Basically:

[1,2,3,4,5] -> 0
1+2=3
3-3=0
0*4=0
0/5=0 -> 0


So I saw an implementation like this:

f => f.reduce((a,b,c) => [a + b, a - b, a * b, a / b, a ** b][c % 5])


And wondered, can I make an array of operators in some way, and implement it like this?

f => f.reduce((a,b,c) => a [+,-,*,/,**][c%5] b)


Clearly this syntax is incorrect, but in the terms of an idea, does something like this exist?

Answer

You can use eval() method

var f = [1, 2, 3, 4, 5];

console.log(
  f.reduce((a, b, c) => eval(a + ['+', '-', '*', '/'][c-1] + b))
);


Also I don't prefer to use eval(), refer : Don't use eval needlessly!


UPDATE : Also as @NinaScholz said, you can reduce the code by using string instead of string array. Both string and array have same effect in this case.

var f = [1, 2, 3, 4, 5];

console.log(
  f.reduce((a, b, c) => eval(a + '+-*/'[c - 1] + b))
);

Comments