2011-11-29 57 views
39

Tôi có các đối tượng JSON có nhiều thuộc tính như id và tên. Tôi lưu trữ chúng trong một mảng JavaScript và sau đó dựa trên danh sách thả xuống, tôi muốn lấy đối tượng từ mảng JavaScript dựa trên id của nó.Chọn từ mảng đối tượng dựa trên giá trị thuộc tính trong JavaScript

Giả sử một đối tượng có id và tên, làm cách nào để chọn đối tượng từ biến mảng của tôi?

var ObjectsList = data; 
var id = $("#DropDownList > option:selected").attr("value"); 
ObjectsList["id=" + id]; 
+0

Bạn cần hiển thị dữ liệu JSON thực tế mà bạn đang cố gắng chọn để chúng tôi có thể tư vấn cách truy cập . – jfriend00

Trả lời

57

Vì bạn đã có jQuery, bạn có thể sử dụng $.grep:

Finds các yếu tố của một mảng mà đáp ứng một chức năng lọc. Mảng gốc không bị ảnh hưởng.

Vì vậy, một cái gì đó như thế này:

var matches = $.grep(ObjectsList, function(e) { return e.id == id }); 

mà sẽ để lại cho bạn với một loạt các mục phù hợp với từ ObjectsList trong mảng matches. Trên giả định rằng ObjectsList có cấu trúc như thế này:

[ 
    { id: ... }, 
    { id: ... }, 
    ... 
] 

Nếu bạn biết rằng chỉ có một trận đấu hoặc nếu bạn chỉ muốn là người đầu tiên thì bạn có thể làm theo cách này:

for(var i = 0, m = null; i < ObjectsList.length; ++i) { 
    if(ObjectsList[i].id != wanted_id) 
     continue; 
    m = a[i]; 
    break; 
} 
// m is now either null or the one you want 

Có có rất nhiều biến thể về cách tiếp cận vòng lặp for và rất nhiều người sẽ vẫy tay với tôi vì họ nghĩ rằng continue là một từ xấu; nếu bạn không thích continue thì bạn có thể thực hiện theo cách này:

for(var i = 0, m = null; i < ObjectsList.length; ++i) { 
    if(ObjectsList[i].id == wanted_id) { 
     m = ObjectsList[i]; 
     break; 
    } 
} 
+3

Điều này đã làm các trick chỉ cần đặt [0] ở cuối để chọn phần tử đầu tiên của mảng mới phù hợp với bộ lọc. – sergioadh

Các vấn đề liên quan