2014-11-05 21 views
1

這是我的代碼:爲什麼我不能設置未定義錯誤的屬性'na0'?

var places = { }; 
var x = 0; 

for (var k in data.na) 
{ 
    var contentId = data.na[k].contentId; 
    var contentType = data.na[k].contentType; 
    var key = contentType + '_' + contentId; 
    var address = data.na[k].address; 
    var topics = data.na[k].topic; 
    var research_theme = data.na[k].research_theme; 

    places[key]["na" + x]= [address, topics, research_theme];  
    x++;  
} 

但是它說遺漏的類型錯誤:無法設置屬性未定義 爲什麼「NA0」?我想要有na0,na1等。我怎樣才能做到這一點?

+1

'places [key]'undefined – 2014-11-05 17:11:10

+0

Your'places'對象爲空 - 它沒有定義任何成員。 – sherb 2014-11-05 17:11:28

回答

1

這條線:

places[key]["na" + x]= [address, topics, research_theme]; 

正試圖設置places[key]一個na0財產,但對places名爲沒有財產key(這是一個完全空白的對象),所以places[key]undefined,導致在錯誤中。

如果你的目標是讓places[key]是分配屬性的對象來,再加入這個上面:

if (!places[key]) { 
    places[key] = {}; 
} 

...所以,如果不存在,你需要創建前試圖設置一個屬性。 (例如,我假設它可能是contentType + '_' + contactId可能有不止一個循環迭代的值相同。)


但你你想去的地方,有時他們na0,其他時間只是na1對象肯定 ,其他時間只是na2等?如果你只是想創建一個na陣列的每個key,你會想這樣做:

if (!places[key]) { 
    places[key] = {na: []}; 
} 
places[key].na.push([address, topics, research_theme]); 

...但有我在你的最終目標的猜測。只是覺得值得一提。

+0

它不創建唯一的密鑰,但。前5號有兩個地址,但它只能放入陣列最新的一個。爲什麼? – snnlankrdsm 2014-11-05 17:17:51

+0

@MertMetin:看看你的代碼,我希望你能得到不止一個(例如'na2'和'na7')。我在我的答案結尾處添加了一條註釋,可能有所幫助。 – 2014-11-05 17:19:57

相關問題