【问题标题】:How to check if 2D array has 3 same values in a row如何检查二维数组是否连续有3个相同的值
【发布时间】:2020-10-22 22:08:51
【问题描述】:

我只是想知道如何检查我的二维数组中是否有连续 3 个相同的值。

我尝试在此处或在 Google 上搜索它,但没有任何帮助。唯一最接近我目标的就是这个。

function check(array, length) {
var count = 0,
    value = array[0];

return array.some(function (a) {
    if (value !== a) {
        count = 0;
        value = a;
    }
    return ++count === length;
});
}

console.log('length: 3');
console.log(check(["g", "z", "z", "z"], 3));                // true
console.log(check(["g", "z", "z", "v" ,"b", "b", "b"], 3)); // true
console.log(check(["z", "g", "z", "z"], 3));                // false

但它不适用于像这样的二维数组。而且我真的不知道如何使这项工作发挥作用。

Let arr=[
 [" ", " "," "],
 [" ", " "," "],
 [" ", " "," "],
]

请记住,此二维数组将由用户在应用启动时生成。它可以是任何长度。例如 6x6 , 3x3 等

因此需要有一种方法可以遍历所有行和列。

我尝试过这样做,它部分有效。问题是,它不仅连续计算 3 个,而且连续计算 3 个。

Let count = 0;
Let searchedValue = "x";
Let ThreeSame=false;

For(let i=0;i<arr.length;i++){
   For(let j=0;j<arr[i]+length;i++){
      If(arr[i][j] === searchedValue){
        count++
      }
      If(count === 3){
        Return ThreeSame=true;
      }
   }
}

最好的方法是水平、垂直和对角线检查。

谢谢。

【问题讨论】:

  • Let array=[ [‘’, 会导致一些语法错误,Let ThreeSame=false; For(let i=0; 和该代码块的其余部分也会导致
  • 对不起,我都是在手机上写的。所以那是因为蜱虫。现在应该可以了

标签: javascript arrays loops


【解决方案1】:

这是执行此操作的函数。确保仅在您知道它已正确生成并且至少有一行和一列时才发送数组。

const check = (array, length) => {
    let value = array[0][0]
    let count = 0
    for(let i = 0; i < array.length && count !== length; i++){
      for(let j = 0; j < array[i].length && count !== length; j++){
        if(value.trim().length > 0 && array[i][j] === value){
          count++
        }
        else{
          value = array[i][j]
          count = 1
        }
      }
    }
    return count === length
}

基本上,您正在遍历矩阵并检查值。如果当前元素不等于该值,则必须将要查找的值设置为当前元素,并将计数器设置为 1,以便在已设置或“找到”的当前元素中计数。

您不需要第三个变量。要优化解决方案,请添加检查以查看是否达到了 for 循环所需的长度,最后如果计数与长度匹配则返回。

另外,从循环内部返回通常不是一个好习惯,因为将来很难追踪代码中发生的事情。总是尝试使用额外的循环条件,并且只在函数结束时返回。

【讨论】:

  • 不适合我.. 试图向它发送这样的数组 let arr=[ [ [" "," ","x","x"], ["x","x" ," "," "], [" "," "," "," "] ] 并返回 true。预期结果为假
  • 好的,我明白了。我编辑了代码 sn-p 所以现在它不会将“”(空字符串)视为实际元素。但是,您发布的数组确实返回 true,因为一行中有 4 个 x(第一行末尾有 2 个,第二行开头有 2 个)。您是否要检查何时正好有 3 个 x 连续并且不再有?
猜你喜欢
  • 2014-05-15
  • 2022-11-22
  • 2011-06-23
  • 2012-06-13
  • 1970-01-01
  • 2021-03-06
  • 2020-12-01
  • 2017-11-24
  • 2021-12-29
相关资源
最近更新 更多