2009-02-05 6 views
8

J'ai une requête json jquery et dans ce json données je veux être en mesure de trier par des valeurs uniques. donc j'aicomment obtenir des valeurs distinctes de json dans jquery

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

Ainsi, loin, je cette

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

} 

mais, je suis à une perte totale quant à la façon obtenir efficacement que les dates de naissance uniques, et les trier par année (ou tout trier par d'autres données personnelles).

J'essaye de faire ceci, et être efficace à ce sujet (j'espère que c'est possible).

Merci

+0

Je vois tout le temps. au lieu d'utiliser l'alerte de fonction (i, personne) (person.birthDate), utilisez function() alert (this.birthDate) – bendewey

Répondre

9

Je ne sais pas comment ce sera performant, mais au fond, j'utilise un objet comme un dictionnaire clé/valeur. Je n'ai pas testé cela, mais cela devrait être trié dans la boucle.

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, c'est génial, et ça me fait le plus (ou beaucoup) de la façon dont je suis encore coincé avec est une fois que j'ai les uniques dans un tableau, comment puis-je demander le nom de la personne en utilisant cela? Je suis en train d'essayer de dire obtenir le nom où birthDate = d? – pedalpete

+0

mis à jour pour inclure votre mise à jour demandée – bendewey

+0

merci bendeweay. Cela fonctionne, mais j'espérais en fait qu'il y aurait une meilleure façon de le faire avec json, afin que je puisse facilement trier par une autre variable plus tard, sans recréer un nouveau tableau. Eh bien, cela fonctionne vraiment. Merci 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

Voici mon:

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