0

我目前正在遍历从 Google Maps API 返回的航点数组,在以下数组中我希望访问标记为 Xa 和 Ya 的值,目前我正在这样做 -[i]["location"]["Xa"]但是 Xa和 Ya 并不总是相同的,有时可能是 aB 和 aC 或 Ya 和 Za 等。有没有通用的方法来访问这些值?

[
   {
      "location":{
         "Xa":xx.xxxxxxxxxxxxx,
         "Ya":xx.xxxxxxxxxxxxx
      },
      "stopover":true
   },
   {
      "location":{
         "Xa":xx.xxxxxxxxxxxxx,
         "Ya":xx.xxxxxxxxxxxxx
      },
      "stopover":true
   },
   {
      "location":{
         "Xa":xx.xxxxxxxxxxxxx,
         "Ya":xx.xxxxxxxxxxxxx
      },
      "stopover":true
   },
   {
      "location":{
         "Xa":xx.xxxxxxxxxxxxx,
         "Ya":xx.xxxxxxxxxxxxx
      },
      "stopover":true
   }
]
4

4 回答 4

1

首先,这是一个 javascript 对象(所有关联数组实际上都是 JavaScript 中的对象)。

如果您确定该location对象将仅包含 2 个属性,则可以使用该for ... in语句并确保您访问的第一个元素是 X 坐标,第二个是 Y 坐标。

参考:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

于 2012-08-11T19:08:10.817 回答
1

首先,正如 Gautham Badhrinathan 指出的那样,javascript 中没有关联数组。相反,它们是对象。(您的示例代码是 JSON,JSON 代表 JavaScript Object Notation)。

其次,.Xa 和 .Ya 是 .lat() 和 .lng() 方法的缩小名称,因此您不应该使用它们,因为它们会随着下一个版本的发布而改变。

第三, l ​​ocation已经是一个google.maps.LatLng()对象,所以你可以直接使用它,如:

for(var i = 0 ; i < yourArray.length ; i++){
    setMarker(yourArray[i].location);

}

function setMarker(latLng){
    var marker = new google.maps.Marker({
        map: map,
        position: latLng
    })
}

最后,如果您确实需要读取各个值,则应使用记录在案的方法,例如:

for(var i = 0 ; i < yourArray.length ; i++){
    var lat = yourArray[i].location.lat();
    var lng = yourArray[i].location.lng();

// do something with vars lat and lng
}
于 2012-08-12T06:39:06.907 回答
0

在尝试使用hasOwnProperty()方法提取对象之前,您可以测试以查看对象中是否存在某些属性

示例:http: //jsfiddle.net/Fd6Ex/6/

于 2012-08-11T19:06:10.857 回答
0

你可以这样做:

for(key in tab[i]["location"]) {
    if(tab[i]["location"].hasOwnProperty(key)) {
        console.log(tab[i]["location"][key]);
    }
}
于 2012-08-11T19:06:27.990 回答