我有2个数组,我需要相互比较并返回相同的数量。
示例:将array1 [abcd]与array2 [adce]进行比较。返回为2,1,因为a和c处于相同位置且d处于错误位置。
function () {
var index = 0;
for (index = 0; index < length; index++) {
if (array1[index] == array2[index]) {
count++
}
}
return count
}
我得到了1的回报。我认为这是因为它们的长度相等,这就是为什么我得到1.所以我想我现在需要放另一个for
循环并拥有该循环单独遍历元素,但不确定如何执行此操作。我在上面提到的内容可能完全错了,如果是的话,有人可以向我解释这个过程。
答案 0 :(得分:1)
您获得1
作为输出,因为代码中未定义length
var array1 = ['a','b','c','d'];
var array2 = ['a','d','c','e'];
var length = Math.min(array1.length,array2.length);
var countMatched = 0,countNotMatched = 0;
for(var index=0;index<length;index++)
{
if(array1[index] == array2[index])
countMatched++;
else if(array2.indexOf(array1[index]) >= 0)
countNotMatched++;
}
alert(countMatched );
alert(countNotMatched);
答案 1 :(得分:1)
有一个JS库UnderscoreJS,它提供了许多处理JavaScript数组的有用方法。您可以使用其差异方法:
_.difference(['a','b','c','d'], ['a','d','c','e']) // returns ["b"]
答案 2 :(得分:0)
如果我正确解释,你想要找到两个阵列中存在的元素数量,精确位置和元素数量,但不在同一位置。
var array1 = ['a', 'b', 'c', 'd'];
var array2 = ['a', 'd', 'c', 'e'];
var largerArray = (array1.length > array2.length)? array1 : array2;
var shorterArray = (largerArray == array1)? array2 : array1;
var count = {
exactPosition: 0, //elements at the exact position
wrongPosition: 0 /*elements present in both arrays but at the wrong position*/
};
//loop the larger array
for(var i = 0; i < largerArray.length; i ++) {
if(array1[i] == array2[i]) {
count.exactPosition ++;
}
//find elements at the wrong position in `largerArray`
else if(largerArray.indexOf(shorterArray[i]) != -1) {
count.wrongPosition ++;
}
}
alert(count.exactPosition);
alert(count.wrongPosition);
这不是一种坚如磐石的方法,不适用于重复方法。
小提琴:Fiddle