3

我有 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循环并让该循环单独遍历元素,但不知道该怎么做。我上面所说的可能完全错误,如果是这样,有人可以向我解释一下这个过程。

4

3 回答 3

2

你得到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/

于 2013-05-28T04:46:44.740 回答
1

有一个 JS 库UnderscoreJS,它提供了许多有用的方法来处理 JavaScript 数组。您可以使用其差异方法:

_.difference(['a','b','c','d'], ['a','d','c','e']) // returns ["b"] 
于 2013-05-28T05:42:43.513 回答
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

小提琴:小提琴

于 2013-05-28T05:09:21.373 回答