2010-09-23 52 views
1

我要访问的对象[] JSON作为文字使用FOR...IN数组。但通过FOR...IN迭代给出的对象xundefined。请参阅下面的代码。无法访问FOR ...在Javascript数组

var myJSONObject = [ 
    {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, 
    {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, 
    {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} 
]; 

for (var x in myJSONObject) { 
    alert(x['method']); 
} 

您可以测试代码在这里在线@JSBin

问候,
穆奈姆

+1

这不是一个JSON阵列,这是一个Javascript数组:JSON仅仅是一个符号(JavaScript对象符号)。 – 2010-09-23 13:44:29

回答

1

尝试

for (var x in myJSONObject) { 
    alert(myJSONObject[x]['method']); 
} 
+0

这个工程!谢谢!你能解释一下吗?我将'x'看作'undefined','myJSONObject [x]'如何工作? – 2010-09-23 13:39:52

+4

不要使用'对... in'遍历数组:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in#Description – 2010-09-23 13:43:32

+1

'x'在这种情况下,是一个标识符,而不是实际的元素。所以,在第一次迭代中,'x'将等于'0'。但是,正如Marcel所述,在迭代数组时,应该使用标准的'for'循环。 – 2010-09-23 13:58:44

0

的了..在语法给你的钥匙迭代的对象,而不是值。因此,你必须做到以下几点:

for (var idx in myJSONObject) { 
    alert(myJSONObject[idx]['method']); 
} 
+0

请勿使用'for ... in'来迭代数组:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...##### – 2010-09-23 13:43:10

5

你不应该迭代使用for … in数组:

虽然它可能是很有诱惑力使用 这样的一种方式来遍历一个 阵列,这是一个坏主意。除了 的 为... in语句遍历 用户自定义属性的数组元素,因此,如果您修改 阵列的非整数或 非积极性(例如,通过 加入了“foo”的属性它甚至 通过添加一个方法或属性 Array.prototype),for ...在 语句将返回您的 用户定义的属性的名称,除了 数字索引。另外,由于为了 迭代的是任意的, 迭代数组可能不能访问数字顺序 元件。因此,当在数组上迭代 时,使用具有数字索引的传统for循环 更好些,这是 。

通过你的阵列就循环是这样的:

for (var i = 0, length = myJSONObject.length; i < length; i++) { 
    alert(myJSONObject[i].method); 
} 

JSBin