2

So I am looking for something similar to this question python if statement with variable mathematical operator but in jQuery/Javascript

Essentially something like

var one = "4";

var two = "6";

var op = "==";

if (one op two) {
//do something
}

is this possible?

0

5 Answers 5

11

You could define a lot of binary functions:

var operators = {
    "==": function(a,b){return a==b;},
    "<=": function(a,b){return a<=b;},
    ">=": function(a,b){return a>=b;},
    "<": function(a,b){return a<b;},
    ">": function(a,b){return a>b;},
    …
};

var one = "4",
    two = "6",
    op = "==";
if (op in operators && operators[op](+one, +two)) {
    //do something
}

If you don't want to generate such a large object and have no complex functions, you also might be able to generate them on-the-fly (using a bit of eval magic):

var validOps = /^([!=<>]=|<|>)$/,
    operators = {};
function check(op, x, y) {
    if (arguments.length > 1)
        return check(op)(x, y);
    if (op in operators)
        return operators[op];
    if (validOps.test(op))
        return operators[op] = new Function("a","b","return a "+op+" b;");
    return function(a, b){return false;};
}

if (check("==", 4, 6)) {
    // do something
}
Sign up to request clarification or add additional context in comments.

Comments

1

You can use eval() but it should be a string that could be evaluated to javascript to get the desired results.

Live Demo

if (eval(one + op + two)) {
    //do something
}

7 Comments

the regular warnings on eval... be careful and make sure you know what your evaluating
Well this works, but I've never used eval before... what is so wrong with it?
Don't use eval. At least, use eval("one"+op+"two") so you only need to take care of validating operands
No need to downvote this answer.. This is perfektly correct .... but it uses eval.. @user1735913 you can eg. look here.. stackoverflow.com/questions/4270597/why-not-eval-json
Not my downvote, but any mention of eval generally gets you at least one. @user1735913 details on the evils of eval stackoverflow.com/questions/86513/…
|
1

If you have an operation (otherwise known as a function) that you'd like to perform on two variables, then you simply need to define it:

var operations,
    a,
    b,
    op;
operations = {
    '==': function (a, b) {
        return a == b;
    },
    '&&': function (a, b) {
        return a && b;
    },
    '||': function (a, b) {
        return a || b;
    }
};
a = 4;
b = 6;
op = operations['=='];
if (op(a, b)) {
    //do stuff
}

Comments

0

I needed something like this recently and ended up writing a function to parse the operator.

Something like:

function checkLogic(one, op, two) {
    switch(op) {
        case '==':
            return one == two;
        // etc
    }
}

Comments

-2

You can use Eval for this

 if(eval(one+op+two)){
//do something
}

1 Comment

...and that's clearly why it exists. :/

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.