我有一个二维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)
非常感谢!
这不是一个数组,它们是简单的对象,这就是为什么你不能使用该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.prototype或Object.prototype对象,这些增强的特性也将被重复.
您应该知道此语句无论如何都不能确保迭代的顺序.
我建议你使用"真正的"数组:
[
[{"name":"aa"},{"name":"bb"}],
[{"name":"cc"},{"name":"dd"}]
]
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您将能够使用该length属性迭代索引.