2017-08-08 55 views
-1

我现在有一个硬编码的阵列看起来像这样:你怎么做一个硬编码对象动态

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}; 

但是这也没有效果。我错过了什么?

回答

2

Nah。 Use push()

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

你应该推到外星人对象:

aliens.push({...}); 

工作例如:

var aliens = []; 
 

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

 
console.log(aliens);

+0

谢谢,KevBot!我知道这是我忽略的东西! – megler

1

上面代码的问题是,你是重新分配变量aliens。如果你是console.log(aliens),你会看到: {left: 800, top: 100};

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

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

也有这样做的另一种方法,可以让你有类似的代码,你有什么上面使用数组索引:

var aliens = []; 

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

这可能是强大的,当它的事项你是什么指数“指点”至。应该注意的是,即使这个方法有效,但如果你只是想在数组的最后或开始添加一些东西,那么应该分别使用push或unshift方法。但是,如果您想在其他位置(例如数组中间)就地更改数组元素,则可以使用该元素。