2011-06-11 53 views
0

Noob问题。设置数组元素会引发错误。在javascript中设置数组

当我运行脚本时出现此错误:array1 [user_id]未定义。

array1 = new Array(); 

// the data variable I got from a JSON source 
// using jQuery 
$.each(data, function(i, item) { 

    // Set variables 
    user_id = item.post.user_id; 
    user = item.post.user; 
    price = item.post.price; 

    if (array1[user_id]['user'] != user) { 
     array1[user_id]['price'] = price; 
     array1[user_id]['user'] = user; 
    } 

} 
+0

嗯..我想利用它更有意义,现在... – Cudos 2011-06-11 00:33:24

+0

这并不是说不好,CUDOS显然试图定义嵌套的对象,并没有意识到每个子对象需要独立初始化。 – 2011-06-11 00:44:03

+0

@pst我在尽我所能。我不了解你,但英语不是我的第一语言,JavaScript对我来说很新。没有理由不礼貌。 – Cudos 2011-06-11 00:48:38

回答

2

首先,你不应该使用数组,如果你需要一个哈希映射,使用对象。在某些语言中,这是一回事,但在JS中他们不是。

定义嵌套对象时,必须将每个级别定义为对象。

var hash = {}; 

// the data variable I got from a JSON source 
$.each(data, function(i, item) { 

    // Set variables 
    user_id = item.post.user_id; 
    user = item.post.user; 
    price = item.post.price; 
    // Have to define the nested object 
    if (!hash[user_id]) { 
     hash[user_id] = {}; 
    } 
    if (hash[user_id]['user'] != user) { 
     hash[user_id]['price'] = price; 
     hash[user_id]['user'] = user; 
    }  
} 
+0

谁对jQuery有什么评论? – Ivan 2011-06-11 00:40:34

+0

@伊万 - 没有人,但它往往使生活更加简单。 – 2011-06-11 00:42:02

+4

@Ivan:海报做到了,我只是修改了他原来的发帖,所以它可以工作,我没有添加任何jQuery。阅读之前,发布和downvote! – 2011-06-11 00:42:10

0

如果我没有理解这个问题,你必须首先初始化数组1的第一个维度,就像这样:

array1[user_id] = {}; 

,那么你可以这样做:

array1[user_id]['user'] = 'whatever'; 

也就是说当然假设你的user_id不是未定义的。

+0

问题是,我不知道“user_id”变量在循环“data”变量之前是什么。 – Cudos 2011-06-11 00:38:35

+0

然后我会使用一个对象和'try'' catch'。 – 2011-06-11 00:39:45