2012-02-14 184 views
0

我對Javascript很陌生。任何有關下面的問題的幫助或建議,高度讚賞。Javascript創建一個對象數組

我想創建一個數組,其中包含對象列表。考慮下面的代碼總結我的問題

{ 
    var Instrument = {}; 
    var InstrumentArray = new Array; 
    var array = new Array; 
    array[0] ="XYZ0"; 
    array[1] ="XYZ1"; 
    . 
    . 
    . 
    array[n] ="XYZn" ; 
    data1['Name'] = "X"; 
    data1['TypeString'] = "WatchList"; 
    data1['FileTypeString'] = "XLS"; 
    for (var i = 0; i < array.length; i++) { 

     Instrument['Symbol'] = array[i]; 
     InstrumentArray.push(Instrument); 
    } 
    for(var j =0; j< InstrumentArray.length;j++) 
    { 
     console.log(InstrumentArray[j]); 
    } 

    } 

當我通過CONSOLE.LOG它顯示我正確的數值,但 符號看看輸出:它顯示的值是我在這種情況下,已經進入最後一個「XYZn」。

我知道最後一個值會覆蓋符號對象,但是他們可以通過任何方式獲得所有存儲的值。

由於提前

+0

在哪裏聲明瞭'data1'? – ggreiner 2012-02-14 23:15:49

回答

4

這是因爲數組InstrumentArray中的每個元素是相同的對象Instrument的引用,你不斷改變一個對象的屬性。代碼中有很多事情需要改進,但最簡單的答案是在循環中創建Instrument

+0

所以我應該如何解決它,我的意思是我需要像這樣的對象{Symbol =「XYZ0」}對象{Symbol =「XYZ1」} ...... – 2012-02-14 23:18:23

+0

具體來說,移動'var Instrument = { };'這樣它就是循環中的第一行。或者乾脆'InstrumentArray.push({Symbol:array [i]})'。在一般的Javascript編程方面,我會閱讀一個很好的指導,例如http://eloquentjavascript.net/ – YXD 2012-02-14 23:20:15

+0

謝謝我得到你 – 2012-02-14 23:22:09

1

在您的代碼:

var Instrument = {}; 
var InstrumentArray = new Array; 

雖然可以調用帶有new構造時,可以省略形式參數列表中,這不是一個好主意,因爲它可能被誤解爲陣的分配,而不是新數組的實例。在任何情況下,文字的陣列可能是一個更好的選擇(無歧義,以下鍵入):

var InstrumentArray = []; 

同樣爲:

var array = ["XYZ0", "XYZ1", ... "XYZn"] 

在下面:

data1['Name'] = "X"; 
data1['TypeString'] = "WatchList"; 
data1['FileTypeString'] = "XLS"; 

data1具有沒有被聲明或初始化,大概它是一個對象(不要混合單引號和雙引號,除非它們是嵌套的,它會使代碼混淆),所以文字可能更好(與上述相同的原因):

var data1 = {'Name': 'X', 'TypeString': 'WatchList', 'FileTypeString': 'XLS'}; 

這也是少得多的類型。

for (var i = 0; i < array.length; i++) { 
     Instrument['Symbol'] = array[i]; 
     InstrumentArray.push(Instrument); 
} 

其他人告訴你這裏發生了什麼,可能不是你想要的。請注意,這裏的屬性名稱遵守rues有效標識符,點號都可以使用(這是一個更方便一點):

 Instrument.Symbol = array[i]; 

此外,由於您使用的是計數器添加成員爲空數組,你也可以這樣做:

 InstrumentArray[i] = Instrument; 

但他們當然不會解決你的問題,他們只是不同做同樣的事情的方式(更好?)。

+0

感謝您的輸入,這絕對有助於編寫有意義的js – 2012-02-16 00:42:41

相關問題