Jomol MJ
Jomol MJ

Reputation: 691

Simplify if condition with multiple variable using javascript

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?

Upvotes: 1

Views: 224

Answers (1)

Adersh
Adersh

Reputation: 598

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

Upvotes: 2

Related Questions