2016-02-17 4 views
0

Это данные, которые я пытаюсь фильтровать:Как добавить несколько фильтров динамически на объекте в JQuery

all_data = { 
    'unique_identity1': { 
     'name': 'abc ', 
     'age': '22', 
     'gender': 'M', 
     'marks': '6' 
    }, 
    'unique_identity2': { 
     'name': 'xyz ', 
     'age': '26', 
     'gender': 'F', 
     'marks': '2' 
    }, 
    'unique_identity3': { 
     'name': 'pqr ', 
     'age': '65', 
     'gender': 'M', 
     'marks': '3' 
    }, 
    // ... 
} 

Эти unique_identity и имена отображаются на пользовательском интерфейсе. И 3 опции age, gender и marks приведены в качестве фильтров. Я хочу фильтровать all_data в соответствии с заданными значениями фильтра, такими как age от '10 до 40 'или' male 'в gender или' 2 до 6 'в marks. Пользователь может одновременно добавлять несколько фильтров и также удалять их. У меня возникают проблемы с фильтрацией all_data в соответствии с фильтрами.

Я создал объект под названием filter_values:

filter_values['age'] = "10-50" 

Так что, когда любой из фильтров добавляются своим ключом и значения добавляются в этом объекте. Это делается по этому методу:

function filter_samples(all_data, filter_values) { 
    if (filter_values.hasOwnProperty('age')) { 
     //check condition 
    } 
    if (filter_values.hasOwnProperty('gender')) { 
     //check condition 
    } 
    if (filter_values.hasOwnProperty('marks')) { 
     //check condition 
    } 
} 

Как добавить условие, являющееся объектом объектов.

Пожалуйста, помогите.

ответ

0

Быстро и очень грязный раствор со специальным форматом для поиска объекта, как это:

{ 
    gender: 'M', 
    age: { 
     min: 20, 
     max: 25 
    } 
} 

var data = { 
 
     unique_identity1: { 'name': 'abc ', 'age': '22', 'gender': 'M', 'marks': '6' }, 
 
     unique_identity2: { 'name': 'xyz ', 'age': '26', 'gender': 'F', 'marks': '2' }, 
 
     unique_identity3: { 'name': 'pqr ', 'age': '65', 'gender': 'M', 'marks': '3' } 
 
    }; 
 

 
function filter(object, search) { 
 
    var r = {}; 
 
    Object.keys(object).forEach(function (k) { 
 
     Object.keys(search).every(function (kk) { 
 
      return (
 
       object[k][kk] === search[kk] || 
 
       typeof search[kk] === 'object' && 
 
       search[kk].min <= object[k][kk] && 
 
       object[k][kk] <= search[kk].max 
 
      ); 
 
     }) && (r[k] = object[k]); 
 
    }); 
 
    return r; 
 
} 
 

 
document.write('<pre>' + JSON.stringify(filter(data, { gender: 'M', age: { min: 20, max: 25 } }), 0, 4) + '</pre>');

Смежные вопросы