练习2D阵列

时间:2016-04-27 16:41:55

标签: javascript arrays

我正在编写一个脚本,在更大的地图中生成一个方形房间。代码如下所示:

var mapSize = 10;
var map = [];
for (var x = 0; x < mapSize; x++) {
    map[x] = [];
    for (var y = 0; y < mapSize; y++) {
        map[x][y] = 0
        };
    };
//Make square room within map
var roomSize = 3;
var roomType = "Kitchen"
var paintRoom = function(mapX, mapY) {
    for (var j = 0; j < roomSize; j++) {
      map[mapX + j][mapY] = roomType;
      map[mapX][mapY + j] = roomType;
    };
};
paintRoom(3, 4);
console.log(map);

我想要的结果是:

[
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, "Kitchen", "Kitchen", "Kitchen", 0, 0, 0], 
  [0, 0, 0, 0, "Kitchen", "Kitchen", "Kitchen", 0, 0, 0], 
  [0, 0, 0, 0, "Kitchen", "Kitchen", "Kitchen", 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]

但我最终得到了这个:

[
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, "Kitchen", "Kitchen", "Kitchen", 0, 0, 0], 
  [0, 0, 0, 0, "Kitchen", 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, "Kitchen", 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]

我在这里缺少什么?我刚刚开始,想尽可能地自己弄清楚,所以如果有人能给我一个提示而不是直接回答,我会非常感激。

2 个答案:

答案 0 :(得分:2)

如果您仔细遵循代码,它就会按照您的要求进行操作。它只需要一个额外的循环。既然你正在做的是2维,那么你也需要2个循环......

x <- data.frame(v1=1:5,v2=1:5,v3=1:5,
            v4=c("Bob","Green","Curley","Banana","No"), 
            v5=c("Hello","This question is awful, Mad",NA,"Help","Me"),
            stringsAsFactors = FALSE)

x <- data.frame(lapply(x, function(i) if(is.character(i)) ifelse(!is.na(i), "N", i) else i))

答案 1 :(得分:0)

你错过了一个循环:

var mapSize = 10;
var map = [];
for (var x = 0; x < mapSize; x++) {
    map[x] = [];
    for (var y = 0; y < mapSize; y++) {
        map[x][y] = 0
        };
    };
//Make square room within map
var roomSize = 3;
var roomType = "Kitchen"
var paintRoom = function(mapX, mapY) {
    for (var j = 0; j < roomSize; j++) {
      for (var k = 0; k < roomSize; k++) {
         map[mapX + j][mapY + k] = roomType;
      }
    };
};
paintRoom(3, 4);
console.log(map);

https://jsfiddle.net/nfnpesmd/