2012-01-07 65 views
6

Cho một số itemarray, tôi muốn biết nếu item tồn tại trong array.Làm thế nào để kiểm tra xem đối tượng jQuery tồn tại trong mảng?

item là đối tượng jQuery, ví dụ: $(".c"). Bạn có thể giả định rằng item.length == 1.

array là một mảng đối tượng jQuery, ví dụ: [$(".a"), $(".b")]. Mỗi mục trong mảng này có thể đại diện cho 0, 1 hoặc nhiều đối tượng.

Sau đây là cách tôi nghĩ để thực hiện điều này: (live demo here)

function inArray(item, arr) { 
    for (var i = 0; i < arr.length; i++) { 
     var items = $.makeArray(arr[i]); 

     for (var k = 0; k < items.length; k++) { 
      if (items[k] == item[0]) { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

Bạn có thể tìm thấy một thi thanh lịch hơn?


Ví dụ:

HTML:

<div class="a">Hello</div> 
<div class="a">Stack</div> 
<div class="a">Overflow</div> 

<div class="b">Have</div> 
<div class="b">a</div> 
<div class="b">nice</div> 
<div class="b">day!</div> 

<div class="c">Bye bye</div> 

JS:

console.log(inArray($(".a").eq(2), [$(".a"), $(".b")])); // true 
console.log(inArray($(".b").eq(3), [$(".a"), $(".b")])); // true 
console.log(inArray($(".c"), [$(".a"), $(".b")]));  // false 
console.log(inArray($(".a").eq(2), [$(".b")]));   // false 
console.log(inArray($(".a").eq(2), []));     // false 
console.log(inArray($(".c"), [$("div")]));    // true 
+2

Liệu nó có phải là một mảng? Tại sao bạn không sử dụng một đối tượng jQuery và ['.index()'] (http://api.jquery.com/index/)? –

+0

@Felix: Tôi đoán bạn muốn sử dụng '$ (". A, .b ")'. Nghe có vẻ hợp lý! –

+1

Hoặc bạn có thể sử dụng ['add()'] (http://api.jquery.com/add/) để xây dựng đối tượng jQuery. –

Trả lời

9

Theo đề nghị của Felix:

[$(selector1), $(selector2), ... ] có thể được đơn giản hóa để

$(selector1, selector2, ...) 

hoặc

$(selector1).add(selector2)... 

và sau đó nó có thể được thực hiện như:

function inArray(item, arr) { 
    return (arr.index(item) != -1); 
} 

Live demo here

+0

Brilliant! Cảm ơn! –

+0

Giải pháp tốt! Tôi không nghĩ rằng điều này thực sự cần một wrapper chức năng, mặc dù - trong khi OP là trong chức năng riêng của mình, chỉ cần làm một dòng bên trong chức năng ở đây là quá đủ. – Leith

8

gì về

if(jQuery.inArray(some, array) === -1) 
{ 
//process data if "some" is not in array 
} 
else 
{ 
//process if "some" is in array 
} 
.210

đọc ở đây: http://api.jquery.com/jQuery.inArray/

+5

Mặc dù đã bỏ phiếu nhiều lần, điều này KHÔNG làm việc cho một mảng chứa các đối tượng jQuery (đó là những gì mà OP yêu cầu). Xem câu trả lời của riêng Misha cho một giải pháp đúng, sử dụng phương thức .index() của jQuery. – Jpsy

+0

Giải pháp này không hoạt động đối với mảng các phần tử jquery – user590849

+0

Không hoạt động đối với mảng đối tượng. Đọc trước. – Craig

0
if($.inArray("valueYouWantToFind", nameOfTheArray) == true) { 
    Your code; 
} 

Eg., 
var userChoice = ["yes"]; 
if($.inArray('yes',userChoice) == true) { 
        alert("found"); 
       } 
0
console.log(!!~$.inArray("a", ["a", "b", "c"])); 
+6

Bạn có thể giải thích một chút về điều này không?Câu trả lời "Thử" câu trả lời này không giải thích được nhiều và khuyến khích các câu hỏi tương tự được hỏi nhiều lần. – Gary

+0

Đồng ý với nhận xét ở trên: xây dựng lý do tại sao đây là câu trả lời sẽ giúp mọi người, đặc biệt là khi bạn đang sử dụng hai "thủ thuật" của JavaScript trong một dòng. – Whymarrh

-1
data = [ 
    {val:'xxx',txt:'yyy'}, 
    {val:'yyy',txt:'aaa'}, 
    {val:'bbb',txt:'ccc'} 
]; 

      var dummyArray = []; 
      var distinctValueArray = []; 

      $.each(data, function (index, firstobject) { 
       //push first element of object in both dummy array and distinct array. 

       if (index == 0) { 
        distinctValueArray.push(firstobject); 
        dummyArray.push(firstobject.txt); 
       } 
       else { 

        //started from 2nd index. 

        if ($.inArray(firstobject.txt, dummyArray) == -1) { 
         distinctValueArray.push(firstobject); 
        } 
        dummyArray.push(firstobject.txt); 
       } 
      }); 
      dummyArray.length=0; 
Các vấn đề liên quan