2012-04-05 17 views
1

私は以下を持っています。オブジェクトの配列を検索する方法を理解しようとしています - call()関数は複数回呼び出されますか?jQuery配列の配列を検索していますか?

var arr = []; 
var newData; 

function call() { 
    newData = $('a').attr('href'); 

    if($.inArray(newData, arr) == -1) { 
     $.post('/blah', function(data) { 
      arr.push(data); 
     }); 
    } 
} 

dataのでarr[[object{id='1', myUrl=''}], [object{id='2', myUrl='' }]]なり[object{ }]のようなものです。

newDataarrに含まれているかどうかを確認していますか?

+0

ミリメートルARR = [] 'と、それを移入せずに、あなたは私はいつもあなたを返すだろうと思い、' $ .inArray(あるnewData、ARRを) '検索しようとしている'場合 - 1 –

+0

ええ 'newData'が' arr'に存在するかどうか、つまり 'myUrl'の1つであるかどうかを確認したいのですか? – Andy

答えて

1

$.inArrayは動作しません。これは、同じ値を含むだけでなく、オブジェクトが同じオブジェクトである場合、オブジェクトは等価であるためです。

$.inArraynewDataは文字列なので、ここでも機能しません。それはあなたのために各オブジェクトの内部を検索するつもりはない、あなた自身のループで自分自身が必要です。

このような何か:

newData = $('a').attr('href'); 
$.each(arr, function(){ 
    if(this.myUrl === newData){ 
     $.post('/blah', function(data) { 
      arr.push(data); 
     }); 
     return false; // break once a match is found 
    } 
}); 
+0

ああ素晴らしい - それは私のprob '$ .inArray'がうまくいきませんでした! :) – Andy

+0

喜んで私は助けることができました:-) –

+0

データは '[object {id = '1'、myUrl = ''}]'のように返されますので、 'this.MyUrl'を使用しても動作しません。 'this [0] .myUrl'が必要だと思いますか? – Andy

0

アレイarrには、オブジェクトのリストが含まれます。なぜnewDataarrに「含まれる」のでしょうか?それらは2つの別々の変数です。

if($.inArray(newData, arr) == -1) { 

あなたは、本質的に(空である)ARRであるnewDataのための外観を言っている: -

アップデートは、さらに調べると、このラインは無意味です。

更新 - ここで動作する必要があるいくつかのサンプルコードです。ここでは、 "url"という名前のプロパティを持つ普通の古いオブジェクト(オブジェクトの配列ではない)としてデータを扱います。配列はオブジェクトが含まれている場合は

http://jsfiddle.net/nWh6N/

+0

確かに 'newData'が配列内にあるかどうかを調べようとしています - myUrlにURLが含まれていて、' newData'がこれらの1つであるかどうか確認したいのですか? – Andy

+0

井戸-1は配列にないと言うだけで、配列にデータをプッシュし、再び呼び出されると検索できますか?しかし、私は '[[オブジェクト{id = '1'、myUrl = ''}]、[オブジェクト{id = '2'、myUrl = ''}]]'のようなオブジェクトの更新された配列を検索する方法は不明です。 – Andy

+0

おかげさまであなたの助けを借りてKrisに感謝します:) – Andy