2012-01-07 8 views
6

itemarrayが与えられた場合、itemarrayに存在するかどうかを知りたいと思います。配列にjQueryオブジェクトが存在するかどうかを確認する方法は?

itemはjQueryオブジェクトです。 $(".c")item.length == 1と仮定できます。

arrayは、jQueryオブジェクトの配列です。 [$(".a"), $(".b")]。この配列内の各項目は、0,1、またはそれ以上のオブジェクトを表します。あなたはよりエレガントな実装を見つけることができ

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; 
} 

live demo here):ここで

は、私はこれを実装すると思った方法ですか?


例:

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

それは配列でなければなりませんか?なぜjQueryオブジェクトと['.index()'](http://api.jquery.com/index/)を使用しないのですか? –

+0

@Felix: '$(" .a、.b ")'を使うことを意味すると思います。合理的に聞こえる! –

+1

また、['add()'](http://api.jquery.com/add/)を使ってjQueryオブジェクトをビルドすることもできます。 –

答えて

9

をフェリックスの提案によると:

[$(selector1), $(selector2), ... ]

$(selector1, selector2, ...) 

または

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

に簡略化することができ、その後、それはとして実装することができます。

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

Live demo here

+0

Brilliant!ありがとう! –

+0

良い解決策!私はこれが実際に関数ラッパーを必要としているとは思わない - OPはそれ自身の関数内にあったが、ここで関数内の1行を実行するだけで十分である。 – Leith

8

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

ここで読む:http://api.jquery.com/jQuery.inArray/

+5

何度もupvotedされていますが、これはjQueryオブジェクト(OPが要求したもの)を含む配列では機能しません。正しいソリューションについては、jQueryの.index()メソッドを使用してMisha自身の答えをご覧ください。 – Jpsy

+0

この解決策はjquery要素の配列では機能しません – user590849

+0

オブジェクト配列では機能しません。最初に読んでください。 – 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

これについて少し詳しく説明できますか?「これを試してみてください」というスタイルの回答はあまり説明せず、何度も何度も尋ねられる同じ質問を促します。 – Gary

+0

上記のコメントに同意する:これが答えである理由を詳しく説明すると、特にJavaScriptの2つの "トリック"を1行で使用している場合に役立ちます。 – 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; 
関連する問題