【问题标题】:Find count of matched elements in two arrays?查找两个数组中匹配元素的数量?
【发布时间】:2018-04-15 10:09:41
【问题描述】:

所以我想在 js 中创建一个函数,它接受两个数组并比较它们并根据两个数组中匹配的点数给出分数。是对的还是bd写的。我是编码新手。

我遇到的另一个问题是当我尝试在 chrome 的控制台上执行它时。它说比较没有定义

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?
  • 我知道我在这个聚会上迟到了,但定义函数的原因是因为你没有第一个 for 循环的右括号。 ;-)

标签: javascript arrays compare


【解决方案1】:

您可以使用.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));

文档:

【讨论】:

  • 你的 reducer 可能只是 a + arr2.includes(c)
  • 谢谢@georg。毫无疑问,您的方法既聪明又干净。我已经更新了我的答案。
【解决方案2】:

这应该适合你:

根据您的要求更新了代码:

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

【讨论】:

  • 我没有指定我想要计算两个数组中相同位置的字符
  • 您的意思是 - 只有匹配且索引相同的字符?
  • 是的,你知道怎么做吗?
  • 嘿@Nilfolquercovarrubias,根据您的要求更新了代码。
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多