使用javascript计算两个数组之间的相似性

使用javascript计算两个数组之间的相似性,javascript,arrays,count,Javascript,Arrays,Count,在过去的4个小时里,我一直在使用javascript 问题是如何计算两个数组之间的相似性,如下所示: arrayA = [a,b,c,d,e,f,g]; arrayB = [c,d,e]; 答案应该是三个。目前我仅有的一段代码产生了一个无限循环:( 请提供帮助(跨浏览器解决方案)在这里: [请注意,.filter()方法在IE8和其他旧浏览器中不起作用,因此我建议使用以下方法] 1) 定义功能: function count_similarities(arrayA, arrayB) {

在过去的4个小时里,我一直在使用javascript

问题是如何计算两个数组之间的相似性,如下所示:

arrayA = [a,b,c,d,e,f,g];
arrayB = [c,d,e];
答案应该是三个。目前我仅有的一段代码产生了一个无限循环:(

请提供帮助(跨浏览器解决方案)

在这里:

[请注意,
.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;
}
如果你不介意旧浏览器的支持,我强烈建议lonesomeday的答案

希望有帮助。

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

[请注意,
.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;
}
如果你不介意旧浏览器的支持,我强烈建议lonesomeday的答案


希望对您有所帮助。

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

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

一种方法是通过检查每个数组是否在
arrayB
中,然后获取新数组的
长度来过滤
arrayA

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


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

一种方法是通过检查每个数组是否在
arrayB
中来过滤
arrayA
,然后获得新数组的
长度:

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

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

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

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


也许你可以展示产生无限循环的代码?也许你可以展示产生无限循环的代码?@l2aelba,因为它很漂亮@l2aelba因为它很漂亮!的确,这是一个很好的解决方案,不过请注意,
filter
代码可以在IE8和之前的版本中使用,如果您将其与垫片一起添加。@GalV请记住,它们只在需要它们的浏览器中使用。如果你真的想支持IE8,那么你最好也不要使用
Array#indexOf
。这确实是一个很好的解决方案,不过请注意
filter
代码可以在IE8和之前使用,如果你加上垫片的话。@GalV好吧,记住它们只在需要它们的浏览器中使用。如果你真的想支持IE8,那么你最好也去掉
Array#indexOf
。请扩展你的答案。在这种形式下,它不是很有用。请扩展您的答案。在这种形式下,它并不是真的有用。