二维阵列对角线检查循环

时间:2013-03-24 17:37:00

标签: javascript for-loop

我尝试创建一个2D数组,并在对角线上放置四个“X”并创建一个双循环来检测和计算X的数量,它可以工作,但它没有正确地完成工作它真正做的是它计数每行中X的数量,我的问题是如何才能算出对角线上的X?

    var creatematrix = function (nbRang, nbColumn) {
        var result = Array(nbRang);
        for (var i=0; i<nbRang; i++) {
            result[i] = Array(nbColumn);
        }
        return result;
    };

    var m = creatematrix(6, 7);

例如,如果我这样做

      m[4][1] = "X";
      m[3][2] = "X";
      m[2][3] = "X";
      m[1][4] = "X";

      m[5][3] = "O";
      m[3][3] = "O";
      m[4][3] = "O";
      m[2][4] = "O";

或者结果是相同的

    m[1][1] = "X";
    m[2][1] = "X";
    m[3][1] = "X";
    m[4][1] = "X";



    m[5][3] = "O";
    m[3][3] = "O";
    m[4][3] = "O";
    m[2][4] = "O";

这就是我所拥有的:

   var sumX = 0;
   for(var k = 5; k >= 0  ; k--){
       if(sumX == 4){
           alert("player 1 won");
       }
       for(var i = 0 ; i<= 6; i++){
           if(m[k][i]== "X" ){
               sumX += 1;
               break;
           }
           if(m[k][i]== "O" ){
              sumX = 0;         
           }
       }
   }    

1 个答案:

答案 0 :(得分:1)

function getCount(m){
    var count =0;
    for(var i=0; i<m.length; i++)
    {
      if(m[i][m.length-i-1] === "X")
      {
         count++;
      }
    }

    return count;
}

这将沿着对角线向下并检查每个值。

您还可以使用

执行更短(但不太可读)的版本
function getCount(m){
    return m.reduce(function(prev,current,index,arr){ 
      return prev + current[arr.length-index-1];},0);
}

JSFiddle