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

时间:2013-11-13 08:23:30

标签: javascript arrays count

我在最近4个小时内坚持使用一段javascript!

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

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

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

请求帮助

4 个答案:

答案 0 :(得分:3)

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

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

希望有所帮助。

答案 1 :(得分:2)

一种方法是通过检查arrayA以查看它是否在arrayB中,然后获取新数组的length来过滤arrayA.filter(function(el) { return arrayB.indexOf(el) >= 0; }).length;

{{1}}

这使用:

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

答案 2 :(得分:0)

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

答案 3 :(得分:-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);
       });