javascript - 通过使用对象计算相同的数组对我不起作用。我错过了什么吗?
问题描述
我的代码没有返回正确的计数,是有一个小错误还是我必须完全放弃这个策略?
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
解决方案
您的问题是,您仅在找到第二次出现数组时才开始计数,因此您的计数将始终少一。首先循环整个数组然后选择大于 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
推荐阅读
- c# - unity .. a logic loop for checking 12 position
- java - java中POJO对象到JSON对象的转换
- sql - SQL:计数和子查询
- c# - SpeechSynthesizer.SelecVoice(字符串)不工作
- vue.js - 如何在 VueJS 中使用带有渲染功能的滚动?
- php - 使用我的插件功能将表单数据放入我的数据库
- java - Jetty 9 - ServletContextListener 中缺少 ServerContainer 属性
- java - 更新后系统库在eclipse中不起作用
- omnet++ - 向 TraCICommandInterface 添加一个函数
- selenium - Selenium:在没有输入标签的字段中输入文本 - 如何找到它?