2014-11-05 23 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

相关问题