2011-06-07 8 views
6

Im tratando de usar grep para filtrar una matriz de objetos json para que la matriz se busque y si el valor de cualquiera de las claves # 2-6 es sí, se devuelve el valor de las claves 1 y 7 .jquery grep en conjunto de objetos json

La matriz está debajo; en otras palabras, si alguno de los valores de las teclas de "ubicación" es sí, el nombre y la descripción se devuelven como elementos de la lista.

Cualquier ayuda es MUY muy apreciada.

[ 
    { 
     "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"   
    } 
] 

Respuesta

13

Usted tendrá que utilizar tanto grep y map. Si a es la matriz descrito anteriormente (pero con name1, name2, etc), entonces después de lo siguiente:

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 contendrá [{"name":"name1","description":"description of services1"},{"name":"name2","description":"description of services2"}]

See example →

+0

Wow - thank usted, gracias, eso es exactamente lo que estaba buscando, y no he usado map o stringify antes. Los datos json provienen de un archivo externo y no estoy seguro de cómo asignarlo a var a ...? – sharpiemarker1

+0

'$ .getJSON ('yourFile.json', function (data) {// aquí los datos serán su matriz});' – mVChr

+0

awesome - thank you thank you! – sharpiemarker1

1

Mi versión es muy similar a la respuesta anterior , Espero que ayude:

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 
     }; 
    }); 
Cuestiones relacionadas