【问题标题】:JavaScript - access arrayJavaScript - 访问数组
【发布时间】:2012-08-08 15:32:56
【问题描述】:

我目前正在遍历从 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
   }
]

【问题讨论】:

    标签: javascript arrays json google-maps-api-3


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可以这样做:

      for(key in tab[i]["location"]) {
          if(tab[i]["location"].hasOwnProperty(key)) {
              console.log(tab[i]["location"][key]);
          }
      }
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 参考链接不再有效。
        • 更新了指向 MDN 页面的链接。
        【解决方案4】:

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

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

        第三,location已经是一个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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-23
          • 2020-11-11
          • 2011-02-01
          • 2018-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多