2012-03-09 78 views
8

Sử dụng jQuery, làm thế nào để tôi lặp qua một mảng các đối tượng và trả về một đối tượng đáp ứng các tiêu chí nhất định?jQuery: Cách tìm đối tượng có thuộc tính nhất định bằng một giá trị nhất định?

+1

Điều này phụ thuộc hoàn toàn vào đối tượng là gì và điều kiện là gì. Chúng tôi cần một số dữ liệu mẫu. –

+0

Bạn đang cố gắng làm gì? Bạn có thể đăng một số mã> – elclanrs

+0

Mỗi đối tượng có thuộc tính ID và Số lượng. Một mảng chứa một tá hoặc nhiều đối tượng. – David

Trả lời

14

Bạn có thể sử dụng jQuery grep chức năng:

var matches = jQuery.grep(array, function(item) { 
    // this is a reference to the element in the array 
    // you can do any test on it you want 
    // return true if you want it to be in the resulting matches array 
    // return false if you don't want it to be in the resulting matches array 

    // for example: to find objects with the Amount property set to a certain value 
    return(item.Amount === 100); 
}); 
// matches contains all objects that matches 
if (matches.length) { 
    // first match is in matches[0] 
} 

Nếu tình trạng của bạn, bạn muốn kiểm tra cho bất cứ điều gì khác hơn là một sự bình đẳng nghiêm ngặt, sau đó bạn sẽ phải sử dụng một số loại mảng lặp mà thực hiện so sánh tùy chỉnh của bạn . Bạn có thể làm điều đó với .each() hoặc với .grep() tùy thuộc vào loại đầu ra bạn muốn.

Nếu điều kiện của bạn là sự bình đẳng nghiêm ngặt, bạn có thể sử dụng jQuery.inArray().

Rõ ràng, bạn không cần jQuery cho điều này vì bạn chỉ có thể lặp qua mảng trong JavaScript đơn giản và thực hiện bất kỳ kiểm tra nào bạn muốn. Một lợi thế của việc sử dụng javascript đơn giản là bạn có thể thoát khỏi sự lặp lại khi bạn đã tìm thấy kết quả mong muốn.

Trong javascript thường xuyên:

for (var i = 0, len = array.length; i < len; i++) { 
    if (array[i].Price === 100) { 
     // match is in array[i] 
     break; 
    } 
} 
+0

Tốt, điều này có thể được thực hiện tương tự như 'Danh sách chung/lambda .Where (n => ...)' trong C# – Pierre

+0

Theo tài liệu jQuery '' 'this''' được gắn với đối tượng cửa sổ chung, không phải là mục. Mục là tham số đầu tiên của hàm đó. – Andy

+0

@Andy - Thx - tôi đã sửa nó. – jfriend00

1
$([1,2,2,4]).filter(function(i,n){return n==2;}); 

này sẽ trả lại cả hai 2 của

cơ bản mảng có thể là một mảng của các yếu tố dom hoặc bất kỳ mảng trên thực tế, nếu nó là một mảng trả về bởi một Bộ chọn jQuery bạn có thể thực hiện một số điều như

$('div.someClass').filter(function(){return $(this).hasClass('someOtherClass')}) 

chỉ cho ví dụ-> điều này sẽ trả về tất cả số div mà ha đã cả SomeClass và someOtherClass (lưu ý: có những cách khác để làm điều này)

cập nhật theo nhận xét của bạn, bạn có thể làm

$(yourArray).filter(function(i,n){return n.Amount && n.Amount == conditionValue;}); 
0

Bạn không thực sự cần jQuery để làm những gì bạn cần:

var objects = [{id:23, amount:232}, {id:42, amount: 3434}, ...] 

// the function which finds the object you want, pass in a condition function 
function findObject(objectMeetsCondition){ 
    for(var i = 0 ; i < objects.length ; i++){ 
     if(objectMeetsCondition(objects[i])) return objects[i]; 
    } 
} 

// your custom condition that determines whether your object matches 
function condition(obj){ 
    return obj.amount == 3434; 
} 

findObject(condition); // returns {id:42,amount:3434} 
Các vấn đề liên quan