3

我对 jQuery/JS 很陌生。但是我在 jQuery 中有循环,我想做一些检查。我想检查 URL 是否已经打印。如果重要的话,循环的数据来自 JSON。

基本上我会有一个数组 var = myArray ,我会在其中放置循环中的所有 URL。我每个人都会经历那个循环。然后每次我都会检查 URL 是否已经在数组中。作为伪:

var myArray = [];
each data {
    myArray.push({'url':data.url});

    if data.url is already in myArray {
        do stuff
    }

    if data.url is not already in myArray {
        do other stuff
    }
}

我在用 jQuery.inArray() 玩 aounrd 但我总是得到 -1

感谢您的帮助!

4

4 回答 4

1

只需直接推送 url 而不是创建对象:

myArray.push(data.url);

然后jquery.inarray()应该可以正常工作

if (jquery.inArray(data.url, myArray))

但是,您需要在循环的末尾而不是开头添加新的 url,否则当您检查时它们将始终位于数组中。

演示:http: //jsfiddle.net/c2934/

于 2012-04-04T12:07:04.253 回答
1

试试这个:

var myArray = [];
$.each(data, function(i,u) {
   if($.inArray(u, myArray)){
        //DO STUFF IF URL IN ARRAY
   }else{
       myArray.push(u);
       //DO SUTFF IF URL NOT IN ARRAY
   }
});
于 2012-04-04T12:11:23.437 回答
1

在您的伪代码中,您在检查它是否存在之前推送到数组,以便它始终存在。那你需要推动data.url而不是{'url':data.url}

您正在寻找的工作示例:

var testData = [ 1, 2, 2, 3, 4]
var myArray = []    
jQuery.each( testData, function( pos, val ) {
    // not in array
    if ( jQuery.inArray( val, myArray ) == -1 ) {
        myArray.push( val );

    // in array  
    } else {
        alert( "Already in [" + myArray + "] : " + val );        
    }    
})​;​
于 2012-04-04T12:18:05.147 回答
0

您也可以使用 $.grep()

var myArray = [];
var ar = [{'url':'test1'},{'url':'test1'},{'url':'test3'}];
$.each(ar,function(ii,data) {
  if ($.grep(myArray,function(e,i){ return e.url == data.url;   }).length > 0) {
    console.log('in array: ' + data.url);
  } else {
    console.log('not in array: ' + data.url);
  }
  myArray.push({'url': data.url });
});
于 2012-04-04T12:43:59.737 回答