我是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
感谢您的帮助!
答案 0 :(得分:1)
直接推送网址而不是创建对象:
myArray.push(data.url);
然后jquery.inarray()
应该可以正常工作
if (jquery.inArray(data.url, myArray))
但是,您需要在循环结束时而不是在开头添加新网址,否则在您去检查时它们将始终位于数组中。
答案 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 });
});