2009-02-05 15 views
8

Ho una richiesta json json e in quei dati json voglio essere in grado di ordinare per valori univoci. quindi hocome ottenere valori distinti da json in jquery

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

Quindi, ora, ho questo

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

} 

ma, io sono in perdita totale su come efficacemente ottenere solo i di nascita uniche, e ordinarli per anno (o di qualsiasi ordinare secondo altri dati personali).

Sto provando a fare questo ed essere efficiente a riguardo (spero che sia possibile).

Grazie

+0

Vedo questo tutto il tempo. invece di usare la funzione (i, persona) alert (person.birthDate) usa function() alert (this.birthDate) – bendewey

risposta

9

io non sono sicuro di come questo sarà performante, ma fondamentalmente sto usando un oggetto come un dizionario chiave/valore. Non ho provato questo, ma questo dovrebbe essere ordinato nel 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

Wow, è fantastico, e mi dà la maggior parte (o molto) del modo in cui ci sono, ma quello che sono ancora bloccato con è una volta che ho gli uniques in un array, come posso interrogare il nome delle persone usando quello? Sto praticamente cercando di dire ottenere il nome dove birthDate = d? – pedalpete

+0

aggiornato per includere l'aggiornamento richiesto – bendewey

+0

grazie bendeweay. Funziona, ma in realtà speravo che ci fosse un modo più bello di farlo con json, in modo da poter facilmente ordinare da un'altra variabile in seguito, senza ricreare un nuovo array. Oh bene, questo funziona sicuramente. Grazie 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

Ecco il mio prendere:

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