在两个数组中查找匹配元素的数量?

6
我想在js中创建一个函数,该函数接受两个数组并比较它们,并根据两个数组中匹配的位置数量给出得分。这样写对吗?我是新手。

另一个问题是当我尝试在Chrome控制台上执行它时,它显示“compare未定义”。

let score = 0;
function compare(arr1, arr2) {
  for (let i = 0; i < arr2.length; i++) {
     for (let j = 0; j < arr1.length; j++) {
        if(arr1[j] === arr2[i]){
            score++;
        }   
    }
}

一个运动项目的多个比赛是否也应该被计算在内?[1,2][1,1,1,1,2,2,2,2]的得分应该是8吗? - Ori Drori
我知道我来晚了,但是定义这个函数的原因是因为你没有为第一个for循环添加闭合括号。;-) - Jester
2个回答

5
你可以使用.reduce()来查找匹配元素的数量:

let arr1 = [1, 2, 3, 4, 5],
    arr2 = [3, 4, 5, 6, 7],
    compare = (a1, a2) => arr1.reduce((a, c) => a + arr2.includes(c), 0);

console.log(compare(arr1, arr2));

另外,您还可以使用.filter()来查找匹配元素的数组,并使用其长度来确定数量。

let arr1 = [1, 2, 3, 4, 5],
    arr2 = [3, 4, 5, 6, 7],
    compare = (a1, a2) => arr1.filter(v => arr2.includes(v)).length;

console.log(compare(arr1, arr2));

文档:


2
你的reducer可以简单地写成a + arr2.includes(c) - georg
谢谢@georg。毫无疑问,你的方法很聪明、更加简洁。我已经更新了我的回答。 - Mohammad Usman

0

这应该适用于您:

按照您的要求更新了代码:

let arr1 = [1, 2, 3, 4];
let arr2 = [3,2,3,4,5];
function compare(arr1,arr2){
  let count=0;
  const max=arr1.length>arr2.length ? arr2.length : arr1.length;
  for(var i=0;i<max;i++){
    if(arr1[i]==arr2[i]){
      count++;
    }
  }
  return count;
}
console.log(compare(arr1,arr2));


我没有明确说明我想要计算在两个数组中相同位置的字符数量。 - Nil folquer covarrubias
你的意思是只有那些匹配且在相同索引处的字符吗? - Deepak
你知道怎么做吗? - Nil folquer covarrubias
嘿@Nilfolquercovarrubias,根据您的要求更新了代码。 - Deepak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接