2009-02-05 48 views
8

Tengo una solicitud jquery json y en esa información json deseo poder ordenar por valores únicos. así que tengocómo obtener valores distintos de json en jquery

 
{"people":[{"pbid":"626","birthDate":"1976-02-06","name":'name'},{"pbid":"648","birthDate":"1987-05-22","name":'name'},..... 

Así que, ahora, tengo esta

 
function(data){ 
      $.each(data.people, function(i, person){ 
       alert(person.birthDate); 

} 

pero, yo estoy en una pérdida total en cuanto a la eficiencia con que obtener sólo las fechas de nacimiento únicas, y ordenarlos por año (o cualquier ordenar por cualquier otro dato personal).

Estoy tratando de hacer esto, y sé eficiente al respecto (espero que sea posible).

Gracias

+0

Veo esto todo el tiempo. en lugar de usar la función (i, persona) alerta (person.birthDate) use function() alert (this.birthDate) – bendewey

Respuesta

9

No estoy seguro de cómo performant este será, pero básicamente estoy usando un objeto como un diccionario clave/valor. No he probado esto, pero esto debería ser ordenado en el ciclo.

function(data) { 
    var birthDates = {}; 
    var param = "birthDate" 
    $.each(data.people, function() { 
     if (!birthDates[this[param]]) 
      birthDates[this[param]] = []; 
     birthDates[this[param]].push(this); 
    }); 

    for(var d in birthDates) { 
     // add d to array here 
     // or do something with d 
     // birthDates[d] is the array of people 
    } 
} 
+0

Guau, eso es increíble, y me saca la mayoría (o mucho) del camino, pero lo que todavía soy atascado una vez que tengo los únicos en una matriz, ¿cómo puedo consultar el nombre de las personas usando eso? Básicamente trato de decir obtener el nombre donde birthDate = d? – pedalpete

+0

actualizado para incluir su actualización solicitada – bendewey

+0

gracias bendeweay. Esto funciona, pero en realidad esperaba que hubiera una manera más agradable de hacerlo con json, para poder ordenar fácilmente por otra variable más adelante, sin volver a crear una nueva matriz. Oh, bueno, esto definitivamente funciona. Gracias Pete – pedalpete

6
function(data){ 
    var arr = new Array(); 
    $.each(data.people, function(i, person){ 
     if (jQuery.inArray(person.birthDate, arr) === -1) { 
      alert(person.birthDate); 
      arr.push(person.birthDate); 
     } 
    }); 
} 
3

Esta es mi opinión:

function getUniqueBirthdays(data){ 
    var birthdays = []; 
    $.each(data.people, function(){ 
     if ($.inArray(this.birthDate,birthdays) === -1) { 
      birthdays.push(this.birthDate); 
     } 
    }); 
    return birthdays.sort(); 
} 
Cuestiones relacionadas