将2个数组的元素相互比较并返回计数JavaScript

时间:2013-05-28 04:23:44

标签: javascript

我有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循环并拥有该循环单独遍历元素,但不确定如何执行此操作。我在上面提到的内容可能完全错了,如果是的话,有人可以向我解释这个过程。

3 个答案:

答案 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);

演示小提琴:http://jsfiddle.net/tCKE7/2/

答案 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);

这不是一种坚如磐石的方法,不适用于重复方法。

Array.indexOf

小提琴:Fiddle