2013-11-25 36 views
0

我有具有以下結構的關聯數組初始化嵌套關聯數組在Javascript

[位置] [產品],然後[COUNT]和[日期]葉條目

我試圖使用來初始化它下面

summary = {}; 
if(location in summary == false && product in summary == false){ 
     summary[location][product] = {}; 
} 

然後然後再遍歷銷售和分配值的對象的代碼使用

summary[location][product]["count"] = count; 
summary[location][product]["date"] = countDate; 

但我得到下面的錯誤,我缺少什麼

Type Error: summary[location] is undefined 
+0

您是否早先通過使用var summary定義了彙總? – echochamber

+0

@echochamber是的,我做到了。 – fanbondi

+0

看起來像ryguy你有覆蓋。 – echochamber

回答

2

你需要爲你去定義每個嵌套對象。因此,而不是

summary = {}; 
if(location in summary == false && product in summary == false) { 
    summary[location][product] = {}; 
} 

需要鍵入

summary = {} 

if (!(location in summary) 
    summary[location] = {} 

if (!(product in summary[location])) 
    summary[location][product] = {} 

summary[location][product]['count'] = count 
summary[location][product]['date'] = countdate 

這將刪除錯誤。

有可能這樣做,我不知道的更有效的方式,但我敢肯定,這個工程。

1

的問題是,你的代碼:

summary = {}; 
if(location in summary == false && product in summary == false) { 
    summary[location][product] = {}; 
} 

永遠不會設置產品,因爲如果位置不是在總結,那麼你將無法設置產品搭配:

summary[location][product] 

因爲你可以」 t設置產品屬性null(位置)

然後當您嘗試訪問位置屬性:

概要[位置] [產品]

同樣的問題發生。位置爲空,您無法訪問其「產品」屬性。

P.S.如果位置和屬性不是一個變量,他們必須在像「位置」或「產品」

1

與您的代碼的問題是,你不能按名稱同時指定未定義或爲空對象成員的多層次,所以像這樣的報價將失敗:

var obj = {}; 
obj.member.member = someValue; // Will fail 

爲了解決這個問題,你總是可以使用對象字面使用它之前初始化「骨架」的對象。這樣可以避免必須逐級初始化對象級別。

summary = {"location": {"product": {}}};