2009-02-05 49 views
8

Tôi có một yêu cầu jquery json và trong dữ liệu json mà tôi muốn có thể sắp xếp theo các giá trị duy nhất. vì vậy tôi cócách lấy các giá trị khác biệt từ json trong jquery

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

Vì vậy, đến nay, tôi có điều này

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

} 

nhưng, tôi đang ở một tổng thiệt hại như thế nào hiệu quả nhận được chỉ là ngày sinh độc đáo, và sắp xếp chúng theo năm (hoặc bất kỳ sắp xếp theo bất kỳ dữ liệu cá nhân nào khác).

Tôi đang cố gắng làm điều này và có hiệu quả về nó (tôi hy vọng điều đó là có thể).

Cảm ơn

+0

Tôi thấy điều này tất cả các thời gian. thay vì sử dụng chức năng (i, người) cảnh báo (person.birthDate) sử dụng chức năng() alert (this.birthDate) – bendewey

Trả lời

9

Tôi không chắc chắn như thế nào performant này sẽ được, nhưng về cơ bản tôi đang sử dụng một đối tượng như một cuốn từ điển chìa khóa/giá trị. Tôi đã không thử nghiệm này, nhưng điều này nên được sắp xếp trong vòng lặp.

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, đó là tuyệt vời, và được tôi nhất (hoặc rất nhiều) của con đường đó, nhưng những gì tôi vẫn còn mắc kẹt với là một khi tôi có các đơn trong một mảng, làm thế nào tôi có thể truy vấn cho những người tên bằng cách sử dụng đó? Về cơ bản, tôi đang cố gắng nói lấy tên nơi birthDate = d? – pedalpete

+0

được cập nhật để bao gồm cập nhật bạn yêu cầu – bendewey

+0

nhờ bendeweay. Điều này làm việc, nhưng tôi đã thực sự hy vọng có một cách tốt hơn để làm điều này với json, để tôi có thể dễ dàng sắp xếp bởi một biến khác sau đó, mà không tái tạo một mảng mới. Ồ, điều này chắc chắn hoạt động. Cảm ơn 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

Dưới đây là quan điểm của tôi:

function getUniqueBirthdays(data){ 
    var birthdays = []; 
    $.each(data.people, function(){ 
     if ($.inArray(this.birthDate,birthdays) === -1) { 
      birthdays.push(this.birthDate); 
     } 
    }); 
    return birthdays.sort(); 
} 
Các vấn đề liên quan