在JavaScript中将对象添加到多维数组

时间:2016-12-24 00:37:38

标签: javascript arrays html5 multidimensional-array html5-canvas

我有一个声明如下的tile对象:

var tile = {
    x: 0,
    y: 0,
    w: canvas.width / numoftiles,
    h: canvas.width / numoftiles,
    color: "#FFFFFF"
};

我有一个多维数组来存储一些这些tile对象,我这样声明:

var tiles = [[]];

我循环浏览画布的长度,添加这些图块以填充屏幕,如下所示:

for (i = 0; i < (canvas.height / numoftiles); i++) {
    for (j = 0; j < (canvas.width / numoftiles); j++) {
        tiles[i][j] = new tile();
    }
}

我的错误发生在该行:

tiles[i][j] = new tile();

JavaScript控制台返回“未捕获的TypeError:tile不是构造函数”

如何将tile对象插入多维数组中的特定位置?

3 个答案:

答案 0 :(得分:1)

当你这样做时:

var tiles = [[]];

您只创建了tiles[0]。要分配给tiles[i][j]tiles[i]必须是一个数组,但除了i之外的任何0都不存在。您需要在循环中创建子数组。

至于你得到的错误,那是因为tile只是一个对象,而不是构造函数。如果尚未定义构造函数,只需在循环中指定对象文字。

var tiles = [];
for (i = 0; i < (canvas.height / numoftiles); i++) {
    tiles[i] = [];
    for (j = 0; j < (canvas.width / numoftiles); j++) {
        tiles[i][j] = {
            x: 0,
            y: 0,
            w: canvas.width / numoftiles,
            h: canvas.width / numoftiles,
            color: "#FFFFFF"
        };
    }
}

答案 1 :(得分:1)

您需要定义一个对象构造函数,然后创建构造类型的对象:

function Tile() {
  this.x = 0;
  this.y = 0;
  this.w = canvas.width / numoftiles;
  this.h = canvas.width / numoftiles;
  this.color = "#FFFFFF";
}

现在你可以使用:

var tile = new Tile();

答案 2 :(得分:0)

tile是一个对象字面值,您不能在其上使用运算符new

只有拥有构造函数时才能使用

new运算符。

This SO has good explanation about how to clone objects: