用 JavaScript 计算两个数组之间的相似之处
count similarities between two arrays with javascript
在过去的 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);
});
相关文章:
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 效率:整数数组的一个子集中两个项之间的最大差值
- 使用Javascript获取两个字符串之间的字符串数组
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 尝试在一个对象的值和一个对象数组之间进行匹配
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 无法在提交之间清空数组
- 使用工厂/服务在控制器AngularJS之间推送数组中的数据
- 数组和ArrayBuffer之间的区别是什么
- 只有一些带undercore.js的字段在对象数组之间求交集和等于
- 如何在数组中循环,等待每个项目之间的时间
- 在数组中的偶数之间插入连字符
- 创建新数组和清除长度之间的差异
- 如何循环数组并保持它们之间的索引增长
- for(数组中的i)和for(var i=0;i<array.length;i++)之间的差异
- 在javascript数组元素之间添加换行符
- 我如何获得 Javascript 中关联数组和常规数组之间的区别
- 如何确定数组中的值是否位于两个附加数组的所有并行索引的值之间
- 数组值和字符串之间的 JavaScript 比较
- AngularJS控制器语法 - 数组和函数版本之间的差异