Reputation: 691
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
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