2017-08-08 58 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方法。但是,如果您想在其他位置(例如數組中間)就地更改數組元素,則可以使用該元素。