比较两个数组的元素并返回计数 JavaScript

3

我有两个数组需要相互比较,并返回相同元素的数量。

例如:将数组1 [abcd] 与数组2 [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循环,并让该循环逐个遍历元素,但不确定如何做到这一点。如果我上面说的是完全错误的,那么有人能向我解释一下过程吗?


2
2,1 的逻辑是什么? - Prasath K
@Prasath K 数组中有2个元素在正确的位置上,还有1个元素在错误的位置上但仍然在数组中。 - 52876
我们仍然无法理解您需要什么... 您期望的结果是什么..?? - Prasath K
@Prasath K 我需要找到绝对匹配的内容。例如:[abcd] 与 [adce] 进行比较,这意味着a和c是每个数组中唯一具有相同位置的两个元素,因此结果将为2... - 52876
你是指在数组中进行字符串元素的char匹配,还是仅仅是元素匹配? - user405398
3个回答

2

你的代码中没有定义length,所以输出结果为1

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/


我输入了你说的内容,但是结果是4。这是因为输入是abcd而不是'a','b','c','d',所以我需要将它们拆分才能使其正常工作吗? - 52876
你的输入是什么?字符串还是数组? - Prasath K
输入是abcd,但通过另一个函数被更改为索引形式0、1、2、3。抱歉我之前没有说清楚,不知道这是否有影响。现在我很困惑,如何判断它是数组还是字符串? - 52876
是的,谢谢。我忘记把我的另一个函数带来了...那么,找到并返回在数组中没有匹配位置但确实在数组中的值的过程是什么?我想自己做,谢谢,但不确定从哪里开始。 - 52876
哦,好的...你需要找到数组中元素的位置或不匹配的元素数量吗? - Prasath K
显示剩余3条评论

1

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

_.difference(['a','b','c','d'], ['a','d','c','e']) // returns ["b"] 

1
_.difference(['a','b','c','d'], ['a','d','c','e']).length 是 OP 想要的结果。无论如何,根据 lodash 的创建者给出的基准测试,lodash 似乎比 underscore 更快。 - user405398
我正在使用underscore和backbone。 - Maksym Kozlenko

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


谢谢你提醒我,我完全忘记了这件事,不要误会我无视它。 - 52876

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接