0

我正在制作一个 18 x 9 的网格,并且想要计算可以放置在网格上的所有可能框的大小。

我将它们放在对象中,但线

var template_sizes_site[x + 'x' + y] = {};

正在失败。看来我不能使用变量和字符串来命名键?

我基本上想说array['2x9']['width'] = 42;

我错过了什么?

var template_sizes = {};
var site_width = 70;
var site_height = 70;
var site_margin = 20;

for (var y = 1; y <= 9; y++)
{ 
for (var x = 1; x <= 18; x++)
    {
        var template_sizes_site[x + 'x' + y] = {};
        template_sizes_site[x + 'x' + y]['width'] = ((site_width * x) + (x > 1 ? site_margin * (x - 1) : 0));
        template_sizes_site[x + 'x' + y]['height'] = ((site_height * y) + (y > 1 ? site_margin * (y - 1) : 0));
    }
}
4

3 回答 3

3

var从嵌套 for 循环主体的第一行中删除:

var template_sizes = {};
var site_width = 70;
var site_height = 70;
var site_margin = 20;

for (var y = 1; y <= 9; y++)
{ 
    for (var x = 1; x <= 18; x++)
    {   
        template_sizes_site[x + 'x' + y] = {};
        template_sizes_site[x + 'x' + y]['width'] = ((site_width * x) + (x > 1 ? site_margin * (x - 1) : 0));
        template_sizes_site[x + 'x' + y]['height'] = ((site_height * y) + (y > 1 ? site_margin * (y - 1) : 0));
    }
}

var仅适用于变量,不适用于属性:

var template = {}; // OK
var template_sizes_site[x + 'x' + y] = {}; // not allowed, no need

template_sizes_site如果这不是错字,您还需要初始化。

于 2013-10-18T09:47:01.380 回答
1

你没有初始化你的变量template_sizes_site(这意味着是template_sizes吗?)。您也可以缩短初始化代码,如下所示。

var template_sizes = {},
    template_sizes_site = {},
    site_width = 70,
    site_height = 70,
    site_margin = 20;

for (var y = 1; y <= 9; y++) { 
  for (var x = 1; x <= 18; x++) {
        template_sizes_site[x + 'x' + y] = {
           'width': ((site_width * x) + (x > 1 ? site_margin * (x - 1) : 0)),
           'height': ((site_height * y) + (y > 1 ? site_margin * (y - 1) : 0))
        };
  }
}
于 2013-10-18T09:48:23.257 回答
1

您需要更改var template_sizes_site[x + 'x' + y] = {};template_sizes_site[x + 'x' + y] = {};,因为您的方式会在范围内创建局部变量,并且在离开它之后(当循环进入下一次时)数据会丢失。

template_sizes_site如果它是您的所有代码,也不会初始化。

于 2013-10-18T09:59:16.957 回答