1

Im stuck on a piece of javascript for the last 4 hours!

The question is how do I count similarities between 2 arrays like so:

arrayA = [a,b,c,d,e,f,g];
arrayB = [c,d,e];

The answer shoud be three. The only piece of code I have at the moment produces a infinite loop :(

Pleas help

4

4 回答 4

4

一种方法是arrayA通过检查每个以查看它是否在 中进行过滤arrayB,然后获取length新数组的 :

arrayA.filter(function(el) {
    return arrayB.indexOf(el) >= 0;
}).length;

这使用:

注意前两个在旧浏览器中不可用,因此需要使用给定链接中的代码填充。

于 2013-11-13T08:30:49.967 回答
4

给你(跨浏览器解决方案):

[注意该.filter()方法不适用于IE8和其他旧浏览器,所以我建议以下方法]

1)定义功能:

function count_similarities(arrayA, arrayB) {
    var matches = 0;
    for (i=0;i<arrayA.length;i++) {
        if (arrayB.indexOf(arrayA[i]) != -1)
            matches++;
    }
    return matches;
}

2)调用它:

var similarities = count_similarities(arrayA, arrayB);
alert(similarities + ' matches found');

如果您不关心旧浏览器的支持,我强烈建议您使用 lonesomeday 的答案。

希望有帮助。

于 2013-11-13T08:26:42.160 回答
0

您应该获取一个数组的每个元素,并使用 arrayA.indexOf(arrayB[i]) 检查它是否存在于另一个数组中。如果它不返回 -1,则增加一个计数变量。最后计数是你的答案。

于 2013-11-13T08:29:17.223 回答
-2

您可以使用 $.inArray() 函数来执行此操作

http://api.jquery.com/jQuery.inArray/

        $(function () {                    
            arrayA = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
            arrayB = ['c', 'd', 'e'];
            var matchCount = 0;

            $.each(arrayB, function (index, value) {
                if ($.inArray(value, arrayA) != -1)
                    matchCount++;
            });        

            alert("Matched elements : " + matchCount);
       });
于 2013-11-13T08:32:36.800 回答