1

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

var arr = [];
var newData;

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

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

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

私が理解しようとしているnewDataのは、に含まれているかどうかarrです。

4

2 に答える 2

1

配列にオブジェクトが含まれている場合、は機能し$.inArrayません。これは、オブジェクトが同じ値を含むだけでなく、同じオブジェクトである場合にのみオブジェクトが等しいためです。

$.inArrayは文字列であるため、ここでも機能しませんnewData。各オブジェクト内を検索するのではなく、独自のループを使用して自分で検索する必要があります。

このようなもの:

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
    }
});
于 2012-04-05T14:53:04.483 に答える
0

配列arrにはオブジェクトのリストが含まれます。なぜnewData「含まれている」のarrでしょうか?これらは2つの別個の変数です。

更新-さらに詳しく調べると、この行は適切ではありません。

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

あなたは本質的にarr(空)でnewDataを探すと言っています。

更新-動作するはずのサンプルコードを次に示します。ここでは、データを「url」という名前のプロパティを持つプレーンオールドオブジェクト(オブジェクトの配列ではない)として扱っています。

http://jsfiddle.net/nWh6N/

于 2012-04-05T14:36:04.573 に答える