在Javascript中解析二维JSON数组

10 浏览
0 Comments

在Javascript中解析二维JSON数组

我有一个二维的JSON数组,每个元素包含多个属性。下面的例子是故意简化的:

var map_data = { "1":
                      {"1":{"name":"aa"},"2":{"name":"bb"}},
                 "2":
                      {"1":{"name":"cc"},"2":{"name":"dd"}}
               };

我试图解析这个数据,但是`.length`不起作用:

for(x=1; x<=map_data.length; x++) { 
    for(y=1; y<=map_data[x].length; y++) {
        // 代码
    }
}

非常感谢!

0
0 Comments

问题的原因是传入的数组是一个二维的JSON数组,而不是一个真正的数组。因此,无法使用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
      }
    }
}

在这段代码中,使用了hasOwnProperty方法来检查属性是否属于对象本身。这是因为for...in语句会遍历对象的所有属性,包括继承的属性。如果对象的原型被扩展,那么这些扩展的属性也会被遍历到。

作者建议使用一个真正的数组来解决这个问题。这样可以使用length属性来遍历数组的索引。

代码示例:

[
 [{"name":"aa"},{"name":"bb"}],
 [{"name":"cc"},{"name":"dd"}]
]

使用这种方式定义数组,就可以使用length属性来获取数组的长度,并通过索引来遍历数组的元素。

最后,作者对指向真正数组的方向表示赞同。令人惊讶的是,有这么多问题涉及在对象上设置数值索引属性的操作。

0
0 Comments

问题:如何在JavaScript中解析二维JSON数组?

原因:由于map_data是一个对象而不是数组,需要使用for/in循环来遍历。

解决方法:可以将JSON作为数组而不是对象发送。

0
0 Comments

在JavaScript中,有时候我们需要解析二维的JSON数组。然而,当我们尝试遍历这个数组时,可能会遇到一些问题。这篇文章将讨论这个问题的原因以及解决方法。

问题的原因是,JavaScript中的for...in循环不仅会遍历对象的直接属性,还会遍历其原型链上的属性。这就意味着,当我们使用for...in遍历一个二维JSON数组时,它会遍历数组的原型链上的属性,而不仅仅是数组中的元素。

为了解决这个问题,我们可以使用hasOwnProperty方法来判断一个对象是否具有指定的属性,而不考虑它的原型链。在上面的代码中,我们使用hasOwnProperty方法来判断map_data对象是否具有属性i和属性j。只有当这两个属性是map_data对象的直接属性时,我们才会处理map_data[i][j]

这样,我们就可以避免遍历数组的原型链上的属性,只处理数组中的元素。这对于解析二维JSON数组非常有用,因为我们只需要处理数组中的元素,而不是原型链上的属性。

总结起来,当我们需要解析二维JSON数组时,遍历数组时可能会遇到问题。为了解决这个问题,我们可以使用hasOwnProperty方法来判断对象是否具有指定的属性,而不考虑其原型链。这样,我们就可以只处理数组中的元素,而不是原型链上的属性。

0