2011-06-07 25 views
6

Bir json nesne dizisini filtrelemek için grep kullanmaya çalışıyorum, böylece dizi aranacak ve # 2-6 tuşlarından herhangi birinin değeri evet ise, 1 ve 7 numaralı tuşların değeri döndürülür .json nesne dizilimi üzerinde jquery grep

dizi altındadır - 'konum' tuşları için değerlerden herhangi evet ise diğer bir deyişle, adını, açıklamasını liste öğeleri olarak döndürülür.

Herhangi bir yardım

ÇOK çok takdir edilmektedir.

[ 
    { 
     "name": "name", 
     "location1": "no", 
    "location2": "no", 
    "location3": "yes", 
    "location4": "no", 
    "location5": "no", 
    "description": "description of services" 
    }, 

    { 
    "name": "name", 
     "location1": "yes", 
    "location2": "no", 
    "location3": "yes", 
    "location4": "no", 
    "location5": "no", 
    "description": "description of services"   
    } 
] 

cevap

13

Sen grep ve map ikisini de kullanmak gerekir. a Eğer yukarıda anlatılan dizi (ancak name1, name2, vs ile), sonra izledikten sonra:

var b = $.grep(a, function(el, i) { 
    return el.location1.toLowerCase() === "yes" 
      || el.location2.toLowerCase() === "yes" 
      || el.location3.toLowerCase() === "yes" 
      || el.location4.toLowerCase() === "yes" 
      || el.location5.toLowerCase() === "yes"; 
}); 

var c = $.map(b, function(el, i) { 
    return { 
     name: el.name, 
     description: el.description 
    }; 
}); 

c[{"name":"name1","description":"description of services1"},{"name":"name2","description":"description of services2"}]

See example →

+0

Wow - thank Eğer, bu benim aradığım de tam öyle var- teşekkür - ve stringify önce kullanılan harita veya sığınak. Json verileri harici bir dosyadan geliyor ve tam olarak nasıl atamadığımı tam olarak bilmiyorum ...? – sharpiemarker1

+0

'$ .getJSON ('yourFile.json', işlev (veri) {// burada veriler diziniz olacak});' – mVChr

+0

harika - teşekkürler u teşekkür ederim! – sharpiemarker1

1

Benim sürüm önceki cevabı çok benzer içerecektir Umarım yardımcı olur:

var checkYes = function(element) { 

     var isYesInside = false; 

     $.each(element, function(key, value) { 
      if (value == "yes") 
       isYesInside = true; 
     }); 

     return isYesInside; 
    }; 

    var yeses = $.grep(a, function(element, index) { 
     return checkYes(element); 
    }); 

    var finalArray = $.map(yeses, function(el, i) { 
     return { 
      name: el.name, 
      description: el.description 
     }; 
    });