2017-08-15 55 views
-3

我有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

是这样的你到目前为止完成了什么? – Observer

+0

你有什么尝试?结果是否为'2',因为4和5在两个数组中都处于位置0和1,因为它们存在于两个数组中?基本上所有你需要的是彼此内部的两个循环。 – h2ooooooo

+0

我尝试过但失败 – xF4B

回答

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; 
    } 
} 
} 
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 
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; 
} 
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; 
}