2016-03-23 23 views
4

Verilerin filtrelenmesi durumunda formun seçilmesiyle ilgili JSON nesnesine sahibim. Benim JSON nesnesi aşağıdadırJSON Nesne Birden çok filtre

Min Age - Max Age ve Gender - male(1) & female(2)

: Benim formu aşağıdaki unsurları vardır

[ 
    { 
     "id":"1", 
     "name":"nehil", 
     "gender":"1", 
     "birthday":"1991-07-22", 
     "business_id":"1", 
     "timestamp":"2016-03-23 04:46:42", 
     "age":"24" 
    }, 
    { 
     "id":"2", 
     "name":"vartika ", 
     "gender":"2", 
     "birthday":"1990-08-14", 
     "business_id":"1", 
     "timestamp":"2016-03-23 04:46:46", 
     "age":"25" 
    }, 
    { 
     "id":"3", 
     "name":"atharva", 
     "gender":"1", 
     "birthday":"1992-10-10", 
     "business_id":"1", 
     "timestamp":"2016-03-23 04:46:49", 
     "age":"23" 
    }, 
    { 
     "id":"4", 
     "name":"karan", 
     "gender":"1", 
     "birthday":"1992-12-22", 
     "business_id":"1", 
     "timestamp":"2016-03-23 04:46:52", 
     "age":"23" 
    } 
] 

günü Gender seçme erkek, ben nesneden tüm erkeklerin id istiyor ve içeriye iterseniz dizi. Daha sonra min yaşını 23 ve maksimum yaşı 24 olarak seçtiğimde, bu dizideki tüm yaşların güncellenen tüm erkeklerin güncellenmesini istiyorum.

Bunu başarmak için en iyi strateji ne olacak? ; http://jsfiddle.net/Nehil/2ym3ffo0/4/

cevap

3

Sen fiddle Çalışma filter

var arrMale,arrFeMale ; 
arrMale = geGenderData(1) 
arrFemale = geGenderData(2) 

console.log(arrMale) 
console.log(arrFemale) 

    function geGenderData(intGenderNum){ 

     return data.filter(function(oneObj,key){ 

      return oneObj.gender ==intGender; 
     }) 

    } 

kullanabilirsiniz - takiben

benim keman link Benzer

Min ve Max koşulu

+0

'intGender' işlevi sağ' intGenderNum' olacak? –

+0

yes.it haklı –

0

t birden fazla öğe aramak gerekiyorsa, arama için özel bir yapıya sahip bir nesneyi kullanabilirsiniz ile yaşa yapabilirsiniz. Bu öneri filtreleme için bu yapıyla, bir nesneyi kullanır:

{ 
    gender: '1', 
    age: { 
     min: 23, 
     max: 24 
    }, 
    birthday: function (s) { return s.match(/-10-10/); } 
} 

algoritması search her özellik arar ve eğer tüm karşılaştırmalar sonra eleman sonuç kümesinde eklenir, doğrudur.

function filter(array, search) { 
 
    return array.filter(function (a) { 
 
     return Object.keys(search).every(function (k) { 
 
      return (
 
       a[k] === search[k] || 
 
       typeof search[k] === 'object' && +search[k].min <= a[k] && a[k] <= +search[k].max || 
 
       typeof search[k] === 'function' && search[k](a[k]) 
 
      ); 
 
     }); 
 
    }); 
 
} 
 

 
var data = [{ id: "1", name: "nehil", gender: "1", birthday: "1991-07-22", business_id: "1", timestamp: "2016-03-23 04:46:42", age: "24" }, { id: "2", name: "vartika ", gender: "2", birthday: "1990-08-14", business_id: "1", timestamp: "2016-03-23 04:46:46", age: "25" }, { id: "3", name: "atharva", gender: "1", birthday: "1992-10-10", business_id: "1", timestamp: "2016-03-23 04:46:49", age: "23" }, { id: "4", name: "karan", gender: "1", birthday: "1992-12-22", business_id: "1", timestamp: "2016-03-23 04:46:52", age: "23" }]; 
 

 
document.write('<pre>' + JSON.stringify(filter(data, { birthday: function (s) { return s.match(/-10-10/); } }), 0, 4) + '</pre>'); 
 
document.write('<pre>' + JSON.stringify(filter(data, { gender: '2' }), 0, 4) + '</pre>'); 
 
document.write('<pre>' + JSON.stringify(filter(data, { gender: '1', age: { min: 23, max: 24 } }), 0, 4) + '</pre>');

+0

Bugün 'doğumgünü' olan insanları istiyorum, o zaman bugünün tarihini ve ayını ve yılını ihmal ederek doğum tarihini nasıl filtreleyebilirim? Örneğin. bugünün tarihi 10-10-2016'dır ve bugün doğumgünü olanların 1992-10-10 gibi olmasını istiyorum. –

+1

nesneyi, sonuç almak için bir işlevi kabul edecek şekilde genişletebilirsiniz. –

+0

@NehilMistry, lütfen düzenlemeye bakın. –

İlgili konular