比较上一个和下一个数组元素

时间:2019-03-16 02:53:43

标签: javascript

这似乎是超基本的,但是我在画空白。

我有几个for循环,我想检查ij的值-1+1,但是显然我检查的数组没有如果没有arr[0-1]元素,则返回错误。我该如何解决?

var islandPerimeter = function(grid) {
let result = 0;

for(var i = 0; i < grid.length; i++) {
  for(var j = 0; j < grid[i].length; j++) {
        if(grid[i][j] === 1) {
            if(grid[i-1][j] !== 1) { //left
                result += 1;
            }
            if(grid[i+1][j] !== 1) { //right
                result += 1;
            }
            if(grid[i][j+1] !== 1) { //bottom
                result += 1;
            }
            if(grid[i][j-1] !== 1) { //top
                result += 1;
            }
        }
      }  
   }
   return result;
};

所以在有//left条注释的地方出现错误:

  

未捕获的TypeError:无法读取未定义的属性“ 1”

如何最好地预防此问题?谢谢。

以下是问题描述,input和预期的output

  

为您提供了一个二维整数网格形式的地图,其中1代表土地,0代表水。

     

网格单元水平/垂直(而不是对角线)连接。网格完全被水包围,只有一个岛(即一个或多个相连的陆地单元)。

     

该岛没有“湖泊”(里面的水与该岛周围的水没有连接)。一个单元格是一个边长为1的正方形。网格是矩形,宽度和高度不超过100。确定岛的周长。

Input:
[[0,1,0,0],
 [1,1,1,0],
 [0,1,0,0],
 [1,1,0,0]]

Output: 16

3 个答案:

答案 0 :(得分:1)

您可以将以下行用作条件

!grid[i-1] || grid[i-1][j] !== 1

这将检查grid[i-1]是否不存在,它将在if语句中跳转。如果存在,它将以正常方式检查其他情况。

for(var i = 0; i < grid.length; i++) {
  for(var j = 0; j < grid[i].length; j++) {
        if(grid[i][j] === 1) {
            if(!grid[i-1] || grid[i-1][j] !== 1) { //left
                result += 1;
            }
            if(grid[i+1][j] !== 1) { //right
                result += 1;
            }
            if(grid[i][j+1] !== 1) { //bottom
                result += 1;
            }
            if(grid[i][j-1] !== 1) { //top
                result += 1;
            }
        }
      }  
   }
   return result;
}

答案 1 :(得分:0)

您可以尝试

var islandPerimeter = function(grid) {
let result = 0;

for(var i = 0; i < grid.length; i++) {
  for(var j = 0; j < grid[i].length; j++) {
    if(grid[i][j] === 1) {
    if (i > 0) {    
    if(grid[i-1][j] !== 1) { //left
            result += 1;
        }
     }
        if(grid[i+1][j] !== 1) { //right
            result += 1;
        }
        if(grid[i][j+1] !== 1) { //bottom
            result += 1;
        }
        if(grid[i][j-1] !== 1) { //top
            result += 1;
        }
    }
  }  
 }
  return result;
 };

答案 2 :(得分:0)

最初的问题将是您尝试通过grid[i-1]的第一遍。当i等于0时,grid[-1]不存在。考虑到这一点,一些基本的验证将确保仅检查定义的单元格。

然后,您只需要使用括号符号即可使用所需的值来访问属性。

var islandPerimeter = function(grid) {
  let result = 0;

  for(var i = 0; i < grid.length; i++) {
    for(var j = 0; j < grid[i].length; j++) {
      if(grid[i][j] === 1) {
        if(grid[i-1] && grid[i-1][j] !== 1) { //left
          result += 1;
        }

        if(grid[i+1] && grid[i+1][j] !== 1) { //right
          result += 1;
        }

        if(grid[i][j+1] && grid[i][j+1] !== 1) { //bottom
          result += 1;
        }

        if(grid[i][j-1] && grid[i][j-1] !== 1) { //top
          result += 1;
        }
      }
    }
  }
  return result;
};

var grid = [
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
];

console.log(islandPerimeter(grid)); // returns 5 ¯\_(ツ)_/¯