1

I am working on a jquery data tablr plugin and need to filter the table data based on some criteria. I have mainly 2 select box with 4 options each. When I select the drop down, I would like to sort the data table based on the selected value. Here I would like to sort the age and salary column from the data table. I am able to sort the data by checking some condtions, but I think it is not the correct way. If any new option will come, need to check that also. So here I would like to know that is there any easy method to achive this by reducing the number of condtions.

This is my drop down

Age:
<select id="min" name="min" class="filter">
    <option value="0">Select</option>
    <option value="1">20 and 30</option>
    <option value="2">30 and 40</option>
    <option value="3">>50</option>
</select>

Salary: 
<select id="max" name="max" class="filter">
    <option value="0">Select</option>
    <option value="1">50k and 80k</option>
    <option value="2">80k and 90k</option>
    <option value="3">>1 Lakh</option>
</select>

This is the condtion I have wrote and which worked for me.

var min    = parseInt( $('#min').val());  
var max    = parseInt( $('#max').val()); 
var age    = parseFloat( data[3] ) || 0; 
var salary = parseFloat( data[5] ) || 0;

            if(min==0 && max==0){
                return true;
            }else if(min==1 && max==0){
                var maxAge = 30;
                var minAge = 20;               
                if ( (age >= minAge && age<=maxAge) ){
                    return true;
                }  
            }else if(min==2 && max==0){
                var maxAge = 40;
                var minAge = 30;
                if ( (age > minAge && age<=maxAge) ){
                    return true;
                }   
            }else if(min==3 && max==0){
                var maxAge = '';
                var minAge = 50;
                if ( (age >= minAge ) ){
                    return true;
                }
            }else if(min==0 && max==1){                
                var maxSal = 80000;
                var minSal = 50000;
                if ( (salary >= minSal && salary<=maxSal) ){
                    return true;
                } 

            }else if(min==0 && max==2){                
                var maxSal = 90000;
                var minSal = 80000;
                if ( (salary > minSal && salary<=maxSal) ){
                    return true;
                } 

            }else if(min==0 && max==3){                
                var maxSal = '';
                var minSal = 100000;
                if ( (salary >= minSal ) ){
                    return true;
                }

            }else if(min==1 && max==1){                
                var maxAge = 30;
                var minAge = 20;
                var maxSal = 80000;
                var minSal = 50000;
                if ( (age >= minAge && age<=maxAge) && (salary >= minSal && salary<=maxSal) ){
                    return true;
                }  

            }else if(min==1 && max==2){                
                var maxAge = 30;
                var minAge = 20;
                var maxSal = 90000;
                var minSal = 80000;
                if ( (age >= minAge && age<=maxAge) && (salary > minSal && salary<=maxSal) ){
                    return true;
                }  

            }
            else if(min==1 && max==3){                
                var maxAge = 30;
                var minAge = 20;
                var maxSal = '';
                var minSal = 100000;
                if ( (age >= minAge && age<=maxAge) && (salary >= minSal) ){
                    return true;
                }  

            }else if(min==2 && max==1){                
                var maxAge = 40;
                var minAge = 30;
                var maxSal = 80000;
                var minSal = 50000;
                if ( (age > minAge && age<=maxAge) && (salary >= minSal && salary<=maxSal) ){
                    return true;
                }  

            }
            else if(min==2 && max==2){                
                var maxAge = 40;
                var minAge = 30;
                var maxSal = 90000;
                var minSal = 80000;
                if ( (age > minAge && age<=maxAge) && (salary > minSal && salary<=maxSal) ){
                    return true;
                }  

            }else if(min==2 && max==3){                
                var maxAge = 40;
                var minAge = 30;
                var maxSal = '';
                var minSal = 100000;
                if ( (age > minAge && age<=maxAge) && (salary >= minSal) ){
                    return true;
                }  

            }else if(min==3 && max==1){                
                var maxAge = '';
                var minAge = 50;
                var maxSal = 80000;
                var minSal = 50000;
                if ( (age >= minAge) && (salary >= minSal && salary<=maxSal) ){
                    return true;
                }  

            }else if(min==3 && max==2){                
                var maxAge = '';
                var minAge = 50;
                var maxSal = 90000;
                var minSal = 80000;
                if ( (age >= minAge) && (salary > minSal && salary<=maxSal) ){
                    return true;
                }  

            }else if(min==3 && max==3){                
                var maxAge = '';
                var minAge = 50;
                var maxSal = '';
                var minSal = 100000;
                if ( (age >= minAge) && (salary >= minSal) ){
                    return true;
                }  

            }
            return false;
        }

Can you guys help me to solve this with any easy way other than writing a lengthy if else condition?

2
  • It doesn't look like there's much in the way of any patterns; the data looks fairly arbitrary. You're going to have to define an explicit mapping somewhere. Commented Mar 20, 2018 at 11:47
  • Don't you need results of age 40 to 50 and salary 90k to 1 lac? Commented Apr 2, 2018 at 7:23

1 Answer 1

2

Don't know if this is what you actually needed. But you can reduce the if statements by using the conditions as a variable and later returning it using &&.

Age HTML:

<select id="ageRange" class="filter">
    <option value="0">Select</option>
    <option value="1">20 and 30</option>
    <option value="2">30 and 40</option>
    <option value="3">40 and 50</option>    
    <option value="4">>50</option>
</select>

Salary HTML:

<select id="salRange" class="filter">
    <option value="0">Select</option>
    <option value="1">50k and 80k</option>
    <option value="2">80k and 90k</option>
    <option value="3">90k and 1 Lakh</option>
    <option value="4">>1 Lakh</option>
</select>

JS

var ageRange = parseInt($('#ageRange').val());  
var salRange = parseInt($('#salRange').val());
var age = parseFloat( data[3] ) || 0; 
var salary = parseFloat( data[5] ) || 0;
var ageCondition = true;
var salCondition = true;

// { Your loop code starts here

    switch (ageRange) {
        case 1:
            ageCondition = (age >= 20 && age <= 30);
            break;
        case 2:
            ageCondition = (age >= 30 && age <= 40);
            break;        
        case 3:
            ageCondition = (age >= 40 && age <= 50);
            break;  
        case 4:
            ageCondition = (age >= 50);
            break;
    }

    switch (salRange) {
        case 1:
            salCondition = (salary >= 50000 && salary <= 80000);
            break;
        case 2:
            salCondition = (salary >= 80000 && salary <= 90000);
            break;
        case 3:
            salCondition = (salary >= 90000 && salary <= 100000);
            break;                
        case 4:
            salCondition = (salary >= 100000);
            break;
    }

    return ageCondition && salCondition; // returns true if both conditions are true

// } your loop code ends here

Note: I've added age 40-50 & salary 90k-1lac which I thought was missing

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.