可以将URL添加到jQuery数组并对其进行一些检查

时间:2012-04-04 12:04:01

标签: jquery arrays json loops each

我是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 个答案:

答案 0 :(得分:1)

直接推送网址而不是创建对象:

myArray.push(data.url);

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

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

但是,您需要在循环结束时而不是在开头添加新网址,否则在您去检查时它们将始终位于数组中。

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

答案 1 :(得分: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
   }
});

答案 2 :(得分: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 );        
    }    
})​;​

答案 3 :(得分: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 });
});