我在最近4个小时内坚持使用一段javascript!
问题是如何计算两个数组之间的相似性:
arrayA = [a,b,c,d,e,f,g];
arrayB = [c,d,e];
答案应该是三个。我目前唯一的一段代码产生了一个无限循环:(
请求帮助
答案 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()函数来执行此操作
$(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);
});