我有array1 = [4, 5, 6, 7, 4, 5];
和array2 = [4, 5]
。
我想匹配array1中的array2并输出匹配的次数。
var array1 = [4, 5, 6, 7, 4, 5];
var array2 = [4, 5];
function match(a1, a2) {
//matches 4,5 twice bc it is in array1
}
match(array1, array2) //output: 2;
答案 0 :(得分:3)
您必须使用嵌套循环并将两个数组的每个索引相互比较。
var count = 0;
for (var i = 0; i < a1.length; i++)
{
for (var j = 0; j < a2.length; j++)
{
if (a1[i]==a2[j])
{
count +=1;
}
}
}
答案 1 :(得分:2)
解决问题的最佳方法是交叉。
答案 2 :(得分:2)
你要求的是一个十字路口。如果您只对匹配数感兴趣,那么此功能应该可以解决问题:
var array1 = [4, 5, 6, 7, 4, 5];
var array2 = [4, 5];
function intersectCount(arr1, arr2) {
var c = 0;
for(const item of arr2) {
if (arr1.indexOf(item) != -1) c++;
}
return c;
}
intersectCount(array1, array2); // result: 2
答案 3 :(得分:1)
您可以在下面的代码中使用您的问题;
var array1 = [4, 5, 6, 7, 4, 5];
var array2 = [4, 5];
function match(a1, a2) {
var result = [];
for(const item of a2) {
if (a1.indexOf(item) > -1 ) {
result.push (item);
}
}
return result.length;
}
答案 4 :(得分:1)
如果您想比较每个索引:
var match = (arr1,arr2)=>arr1.filter((el,i)=>el === arr2[i]).length;
如果要计算两个数组中存在的所有元素,可以通过集合统一:
function match(arr1,arr2){
var set = new Set( arr2 );
return arr1.filter( el => set.has(el) ).length;
}