检查数组中是否存在值

时间:2015-02-25 23:15:05

标签: javascript jquery

我想检查Array2中是否存在Array1中的值。如果存在,则将新值中的该值的索引添加为值。

下面我的解决方案几乎就是这样做但是它给我提醒每个相同的数字,重复。例如,array1中的值为4355,它是该值的3,但它只提醒我一次。我想每次都提醒我。

var array1 = [];
array1.push(3545);
array1.push(4355);     
array1.push(5435);
array1.push(3457); 
array1.push(4355);
array1.push(4355);
var array2 = [];
array2.push(1022);
array2.push(4355);
array2.push(2333);
array2.push(5656);
array2.push(1234);
array2.push(5555);
array2.push(7777);
array2.push(3455);

for(var i=0; i<array2.length; i++){
 checkIfExist(array2[i], array1);
}

function checkIfExist(searchValue, searchArray){
  if ($.inArray(searchValue, searchArray) < 0) {
      alert(searchValue + " not found");
    }
    else {
        alert(searchValue + " found with index(" + $.inArray(searchValue, array2) + ") in array");
    }
}

6 个答案:

答案 0 :(得分:2)

要查找 all 数组中特定值的索引,可以使用jQuery.each()

var indices = [];
$.each(searchArray, function(index, value) {
    if (value == searchValue) {
        indices.push(index);
    }
});

现在,indices是一个数组,其中包含找到值的索引,如果没有匹配则为空。

答案 1 :(得分:1)

我不太清楚你想要什么......希望它会对你有所帮助!

var array1 = [];
array1.push(3545);
array1.push(4355);     
array1.push(5435);
array1.push(3457); 
array1.push(4355);
array1.push(4355);
var array2 = [];
array2.push(1022);
array2.push(4355);
array2.push(2333);
array2.push(5656);
array2.push(1234);
array2.push(5555);
array2.push(7777);
array2.push(3455);

var array3={};
for(var i=0; i<array1.length; i++){
  if( (index= array2.indexOf(array1[i])) > 0 ){
    
    if(!array3[array1[i]])
      array3[array1[i]]= []
    array3[array1[i]].push({index1:i,index2:index});
    
  }
}
document.write(JSON.stringify(array3, undefined, 2));
console.log(array3);

答案 2 :(得分:0)

也许在每次找到匹配发送警报时尝试循环遍历数组

alert(searchValue + " found with index(" + $.inArray(searchValue, array2) + ") in array");

(对不起,我不能把它作为评论,我还没有50个声誉。

答案 3 :(得分:0)

使用常规的javascript方式从数组中获取索引而不是这些有角度的东西:

array.indexOf( value )

这将返回值的索引,如果找不到则返回-1

function checkIfExist(value, array) {
  var index = array.indexOf(value);

  if (index === -1) {
    alert(searchValue + " not found");
  } else {
    alert(value + " found with index(" + index + ") in array");
  }
}

答案 4 :(得分:0)

这样的事情怎么样?请参阅jsfiddle

var arr = [3545, 4355, 5435, 3457, 4355, 4355],
arr2 = [1022, 4355, 2333, 5656, 1234, 5555, 7777, 3455],
occurences = {};

arr2.forEach(function(el, i, array) {
    occurences[el] = $.map(arr, function(element, index) {
        return element == el ? index : null;
    });
});

console.log(occurences);

$('body').html('Indexes: '+JSON.stringify(occurences));

// ==> Indexes: {"1022":[],"1234":[],"2333":[],"3455":[],"4355":[1,4,5],"5555":[],"5656":[],"7777":[]}

基本上,这会循环显示arr2以将每个值与arr中的值相匹配。来自arr2的每个值都成为一个名为occurences的新对象的键,并且有一个arr索引数组,其值与{{1}中的值匹配}}

正如您所看到的,arr2arr2显示的唯一值 4355 ,它出现在 1,4和_的索引处5 即可。由于arr中的其他值都不匹配arr2中的值,因此这些值的索引数组只是空的。

显然,您可以对代码进行一些调整,并根据您的需要进行调整。

答案 5 :(得分:0)

$.inArray仅为从0其他-1开始的数组中的第一个匹配项提供索引。

function checkIfExist(searchValue, searchArray){
  var index = [];//trace all matching index
  for(var i = 0, l = searchArray.length; l > i; i ++) {
    if(searchValue === searchArray[i]) {//matched value
      index.push(i);//add index to array
    }
  }
  return index;
}

var arr = checkIfExist(0, [1,0,3,9,0]);

if(arr.length) {//match found
    alert('Matched at index: ' + arr.join(','))
} else {
  alert('No match found');
}