用 JavaScript 计算两个数组之间的相似之处

count similarities between two arrays with javascript

本文关键字:之间 数组 相似 两个 计算 JavaScript      更新时间:2023-09-26

在过去的 4 个小时里,我卡在一段 JavaScript 上!

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

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

答案应该是三个。我目前唯一的代码段产生了无限循环:(

请求帮助

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

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

这使用:

  • Array#indexOf
  • Array#filter
  • Array#length

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

在这里(跨浏览器解决方案):

[请注意,.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的答案。

希望有帮助。

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

你可以

用$.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);
       });