在Javascript中按位置获取对象

时间:2014-02-02 14:30:42

标签: javascript google-maps

我的问题是我有一个功能,它将从谷歌地图填充两个输入字段的纬度和经度,但当我得到坐标时,我会按照他们的名字得到它们,在本例中为“d”和“e”。但是这些名称每周都在不断变化,因此我必须手动更改函数中的值才能使其正常工作。不确定是否是导致他们改变的那个。

我更愿意通过他们的位置获取值,在Python中我可以从字典中执行类似 latlng [0] 的操作并获取第一个值,我怎样才能在Javascript中执行类似的操作?

这是我在函数中运行注释部分时得到的结果。

{"d":58.3991706643976,"e":15.574407577514648}

将cordinates插入输入字段函数

function insertCoordinates(latlng) {

    // ---------------
    //latlng = JSON.stringify(latlng);
    //document.write(latlng);
    //----------------

    document.getElementById('start_lat').value = latlng["b"];
    document.getElementById('start_lng').value = latlng["d"];


}

初始化功能

function initialize() {
    var mapOptions = {
        center: new google.maps.LatLng(XXXX, YYYYY),
        zoom: 16,
        mapTypeId: google.maps.MapTypeId.ROADMAP
        };
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

    google.maps.event.addListener(map, 'click', function(event) {
        createMarker(map, event.latLng, "Click: "+event.latLng);
        insertCoordinates(event.latLng);
    });
}

1 个答案:

答案 0 :(得分:0)

  

但是这些名称不断变化所以我必须手动更改我的函数中的值才能使其工作。我更愿意通过他们的位置获得价值......

他们没有职位。 JavaScript对象中的属性没有顺序。这两个对象在JavaScript中完全相同:

a = {d: 1, e: 2};
b = {e: 2, d: 1};

虽然许多JavaScript引擎会按照属性添加到对象的顺序枚举属性的名称(例如,在for-in循环中,或通过Object.keys),这是没有指定的行为,也不是通用的,也不应该依赖于添加属性的顺序。

这里需要解决的真正问题是属性名称是移动目标。

更新:他们成为移动目标的原因是他们不属于公共API。请参阅Google文档中的LatLng object。您不应该使用Google地图内部的属性;您使用lat()lng()方法。 (所以当他们改变时,可能是因为谷歌更新他们的代码并再次通过他们的Closure编译器运行它,它重命名的东西使它们更短,除非它们被标记为导出 - 当然,私有内部属性不会。 )