如何使硬编码对象动态

时间:2017-08-08 15:39:06

标签: javascript loops object

我目前有一个硬编码数组,如下所示:

var aliens = [
{left: 100,  top:  100},
{left: 200,  top:  100},
{left: 300,  top:  100},
{left: 400,  top:  100},
{left: 500,  top:  100},
{left: 600,  top:  100},
{left: 700,  top:  100},
{left: 800,  top:  100}
];

我想创建一个动态创建它的函数,而不是将其全部硬编码。我试过这个:

var aliens = [];

    for (var x = 100; x < 900; x+=100) {
        aliens = {left: x, top: 100};
    }

但是,这并不会增加x。我有理由相信我错过了一些非常简单的东西,但我不知道它是什么。我试过制作

 aliens += {left: x, top: 100};

但这也不起作用。我错过了什么?

3 个答案:

答案 0 :(得分:3)

你应该推到外星人对象:

aliens.push({...});

工作示例:

var aliens = [];

for (var x = 100; x < 900; x += 100) {
  aliens.push({
    left: x,
    top: 100
  });
}

console.log(aliens);

答案 1 :(得分:2)

罗。 Use push()

aliens.push( {left: x, top: 100} )

答案 2 :(得分:1)

上述代码的问题在于您正在重新分配变量aliens。如果你去console.log(aliens),这就是你会看到的:     {left: 800, top: 100};

这意味着它从指向数组的变量转到指向上面打印的对象。

正如其他答案所指出的那样,在一个名为.push()的数组原型上有一个方便的方法。您可以找到here的文档。

还有另一种方法可以让你拥有与上面使用数组索引类似的代码:

var aliens = [];

for (var x = 1; x < 9; x++) {
    aliens[x-1] = {left: x * 100, top: 100};
}

当你的指数变得重要时,这可能会非常强大&#34;指向&#34;至。应该注意的是,即使这有效,如果您只想要在数组的末尾或开头添加内容,则应分别使用推送或非移位方法。但是,如果您想在其他位置(例如数组的中间)就地更改数组元素,这可能会起作用。