首页 > 解决方案 > 通过使用对象计算相同的数组对我不起作用。我错过了什么吗?

问题描述

我的代码没有返回正确的计数,是有一个小错误还是我必须完全放弃这个策略?

function countIdenticalArrays(arr1, arr2, arr3, arr4) {
  var count = 0;
  var obj = {};
  var culmArr = [...arguments];
  for (var i = 0; i < culmArr.length; i++) {
    if (obj[culmArr[i]] === undefined) {
      obj[culmArr[i]] = 1;
    } else {
      obj[culmArr[i]]++;
    }
    if (obj[culmArr[i]] > 1) {
    count++ 
  }
  }
  return count;
}

console.log(countIdenticalArrays([0, 0, 0], [0, 1, 2], [0, 0, 0], [2, 1, 0])); // 2
console.log(countIdenticalArrays([0, 1, 0], [0, 1, 2], [0, 2, 0], [2, 1, 0])); // 0
console.log(countIdenticalArrays([0, 1, 2], [0, 1, 2], [0, 1, 2], [2, 1, 0])); // 3

标签: javascript

解决方案


您的问题是,您仅在找到第二次出现数组时才开始计数,因此您的计数将始终少一。首先循环整个数组然后选择大于 1 的最大值可能更容易:

function countIdenticalArrays(arr1, arr2, arr3, arr4) {
  var count = 0;
  var obj = {};
  var culmArr = [...arguments];
  for (var i = 0; i < culmArr.length; i++) {
    if (obj[culmArr[i]] === undefined) {
      obj[culmArr[i]] = 1;
    } else {
      obj[culmArr[i]]++;
    }
  }
  for (let c of Object.values(obj)) {
    if (c > 1 && c > count) count = c;
  }
  return count;
}

console.log(countIdenticalArrays([0, 0, 0], [0, 1, 2], [0, 0, 0], [2, 1, 0])); // 2
console.log(countIdenticalArrays([0, 1, 0], [0, 1, 2], [0, 2, 0], [2, 1, 0])); // 0
console.log(countIdenticalArrays([0, 1, 2], [0, 1, 2], [0, 1, 2], [2, 1, 0])); // 3


推荐阅读