在Javascript中解析2维JSON数组

MrG*_*MrG 3 javascript json

我有一个二维JSON数组,其中每个元素包含几个属性.以下示例有意简化:

var map_data = { "1":
                      {"1":{"name":"aa"},"2":{"name":"bb"}},
                 "2":
                      {"1":{"name":"cc"},"2":{"name":"dd"}}
               };
Run Code Online (Sandbox Code Playgroud)

我尝试解析数据但.length不起作用:

for(x=1; x<=map_data.length; x++) { 
    for(y=1; y<=map_data[x].length; y++) {
        // CODE 
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

CMS*_*CMS 7

这不是一个数组,它们是简单的对象,这就是为什么你不能使用该length属性.

您需要使用以下for...in声明:

for(var x in map_data) { 
  if (map_data.hasOwnProperty(x))
    for(var y in map_data[x]) {
      if (map_data[x].hasOwnProperty(y)) {
        // CODE
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

hasOwnProperty检查是因为在所有的属性这一说法迭代,继承或没有,如果事情(像一些JavaScript框架)增强的Array.prototypeObject.prototype对象,这些增强的特性也将被重复.

您应该知道此语句无论如何都不能确保迭代的顺序.

我建议你使用"真正的"数组:

[
 [{"name":"aa"},{"name":"bb"}],
 [{"name":"cc"},{"name":"dd"}]
]
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您将能够使用该length属性迭代索引.