在Javascript中解析二维JSON数组
问题的原因是传入的数组是一个二维的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属性来获取数组的长度,并通过索引来遍历数组的元素。
最后,作者对指向真正数组的方向表示赞同。令人惊讶的是,有这么多问题涉及在对象上设置数值索引属性的操作。
在JavaScript中,有时候我们需要解析二维的JSON数组。然而,当我们尝试遍历这个数组时,可能会遇到一些问题。这篇文章将讨论这个问题的原因以及解决方法。
问题的原因是,JavaScript中的for...in
循环不仅会遍历对象的直接属性,还会遍历其原型链上的属性。这就意味着,当我们使用for...in
遍历一个二维JSON数组时,它会遍历数组的原型链上的属性,而不仅仅是数组中的元素。
为了解决这个问题,我们可以使用hasOwnProperty
方法来判断一个对象是否具有指定的属性,而不考虑它的原型链。在上面的代码中,我们使用hasOwnProperty
方法来判断map_data
对象是否具有属性i和属性j。只有当这两个属性是map_data
对象的直接属性时,我们才会处理map_data[i][j]
。
这样,我们就可以避免遍历数组的原型链上的属性,只处理数组中的元素。这对于解析二维JSON数组非常有用,因为我们只需要处理数组中的元素,而不是原型链上的属性。
总结起来,当我们需要解析二维JSON数组时,遍历数组时可能会遇到问题。为了解决这个问题,我们可以使用hasOwnProperty
方法来判断对象是否具有指定的属性,而不考虑其原型链。这样,我们就可以只处理数组中的元素,而不是原型链上的属性。