2

I have condition select box like :

Select Column
Select Operator 
 <option value="">Choose operator</option>
 <option value="=">Equals</option>
 <option value="!=">Does not equal</option>
 <option value="LIKE%%">Contains</option>
 <option value="NOT LIKE%%">Does not contain</option>
 <option value="<">Less then (&lt;)</option>
 <option value=">">Greater then (&gt;)</option>
 <option value="<=">Equals or less then (&lt;=)</option>
 <option value=">=">Equals or greater (&gt;=)</option>
AND Value

I have got all of these in an Array Like :

var filterby = [];
    $.each(panels, function(index, row) {
        var obj = {};
        obj['column'] = $(row).find('.dt_column').val();
        obj['operator'] = $(row).find('.dt_operator').val();
        obj['value'] = $(row).find('.dt_value').val();
        filterby.push(obj);
    });

Now i have filterby array and want to implement them onto an array.

i am here :

var generatedData=tableData.filter(function(index,data){
    $.each(conditions,function(index,condition){
        if(data[condition.column])

    });
});
  • what will be the condition ? if(data[condition.column]) ?
  • is it possible in javascript or jQuery ?
  • and I am filtering data for DataTable
4
  • I can only think of eval() to do this. Commented Oct 8, 2015 at 19:07
  • @Kriggs it should return true or false and don't have to perform action Commented Oct 8, 2015 at 19:10
  • Still, eval('12 > 11') yields a boolean, true. I've always read that it's dangerous to use eval() in user input tough. Commented Oct 8, 2015 at 19:13
  • Its work Fine.. Thanks @Kriggs Commented Oct 8, 2015 at 19:37

1 Answer 1

2

Without html or any correlating names, this is going to be a little bit generic. I will just start with your set of conditional statements.

<option value="">Choose operator</option>
<option value="=">Equals</option>
<option value="!=">Does not equal</option>
<option value="LIKE%%">Contains</option>
<option value="NOT LIKE%%">Does not contain</option>
<option value="<">Less then (&lt;)</option>
<option value=">">Greater then (&gt;)</option>
<option value="<=">Equals or less then (&lt;=)</option>
<option value=">=">Equals or greater (&gt;=)</option>

You are going to have to translate these to functions, which expect to be called with a left side and right side argument.

var conditionalFunctions = {
    "=" : function(left,right){ return left === right },
    "!=" : function(left,right){ return left !== right },
    "LIKE%%" : function(left,right){ return left.indexOf(right) > -1 },
    "NOT LIKE%%" : function(left,right){ return left.indexOf(right) == -1 },
    "<" : function(left,right){ return left < right },
    ">" : function(left,right){ return left > right },
    "<=" : function(left,right){ return left <= right },
    ">=" : function(left,right){ return left >= right }
};

And then call these from based on the selected value from your earlier options and use the arguments from whatever the current row values are.

var conditionalFunctions = {
        "=" : function(left,right){ return left === right },
        "!=" : function(left,right){ return left !== right },
        "LIKE%%" : function(left,right){ return left.indexOf(right) > -1 },
        "NOT LIKE%%" : function(left,right){ return left.indexOf(right) == -1 },
        "<" : function(left,right){ return left < right },
        ">" : function(left,right){ return left > right },
        "<=" : function(left,right){ return left <= right },
        ">=" : function(left,right){ return left >= right }
    };

var oper = document.querySelector("#operator"),
    rows = document.querySelectorAll(".row");
document.querySelector("#compare").onclick = function(){
    var func = conditionalFunctions[oper.value];
    for(var i = 0; i < rows.length; i++){
        var row = rows[i],
            left = row.querySelector(".left").innerText,
            right = row.querySelector(".right").innerText;
        row.querySelector(".op").innerText = oper.value;
        row.querySelector(".result").innerText = func(left,right);
       
    }
};
.row span { margin : 5px; }
.result { color: red; }
<select id="operator">
    <option value="">Choose operator</option>
    <option value="=">Equals</option>
    <option value="!=">Does not equal</option>
    <option value="LIKE%%">Contains</option>
    <option value="NOT LIKE%%">Does not contain</option>
    <option value="<">Less then (&lt;)</option>
    <option value=">">Greater then (&gt;)</option>
    <option value="<=">Equals or less then (&lt;=)</option>
    <option value=">=">Equals or greater (&gt;=)</option>
</select>
<button type="button" id="compare">Compare</button>
<div class="row">
  <span class="left">1</span>
  <span class="op"></span>
  <span class="right">2</span>
  <span class="result"></span>
</div>
<div class="row">
  <span class="left">2</span>
  <span class="op"></span>
  <span class="right">2</span>
  <span class="result"></span>
</div>
<div class="row">
  <span class="left">"hello"</span>
  <span class="op"></span>
  <span class="right">"h"</span>
  <span class="result"></span>
</div>

Sign up to request clarification or add additional context in comments.

1 Comment

yes this is awesome answer this works like charm.. thanks

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.