首页 > 解决方案 > 如何获取数组Javascript中第二小的值的等效标签名称

问题描述

在将一个标记拖过地图后,我正在使用谷歌地图 API 来获取标记列表中最近的标记。这是我的代码:

google.maps.event.addListener(marker, 'dragend',
    function (markerFunc) {
        var latLng = markerFunc.latLng;
        marker.position = latLng;
        
        var smallest = Infinity;
        var secondSmallest = Infinity;
        var labelSecondSmallest="";
        
        for(var i=0; i<markers.length; i++){
          
        var distance = google.maps.geometry.spherical.computeDistanceBetween(marker.position, markers[i].position, 100);
        console.log("Distance from " + marker.label + " to " + markers[i].label + " is" + distance);

            if (distance < smallest) {
                secondSmallest = smallest;
                smallest = distance;
            } else if (distance < secondSmallest) {
                secondSmallest = distance;
                labelSecondSmallest = markers[i].label
            }


        }
        
        console.log(secondSmallest);
        console.log(labelSecondSmallest);

    }
);

我的输出如下所示: 在此处输入图像描述

在这里,您可以在示例中看到第二小的值是 V2 到 D2,并且浮点值打印在下面。但是,字符串D1被打印出来,而不是D2正确答案。如何返回预期的字符串?

JS 小提琴:https ://jsfiddle.net/pw23vbLm/7/

标签: javascriptgoogle-maps-api-3

解决方案


我认为问题在于您没有存储最小值的标签,因此当最小值变为第二最小值时,就没有标签可以使用了。添加一个 labelSmallest 变量并跟踪它以及距离。就像是:

google.maps.event.addListener(marker, 'dragend',
function (markerFunc) {
    var latLng = markerFunc.latLng;
    marker.position = latLng;
    
    var smallest = Infinity;
    var secondSmallest = Infinity;
    var labelSmallest = "";
    var labelSecondSmallest="";
    
    for(var i=0; i<markers.length; i++){
      
    var distance = google.maps.geometry.spherical.computeDistanceBetween(marker.position, markers[i].position, 100);
    console.log("Distance from " + marker.label + " to " + markers[i].label + " is" + distance);
        if (distance < smallest) {
            secondSmallest = smallest;
            labelSecondSmallest = labelSmallest;
            smallest = distance;
            labelSmallest = markers[i].label;
        } else if (distance < secondSmallest) {
            secondSmallest = distance;
            labelSecondSmallest = markers[i].label;
        }
    }
    
    console.log(secondSmallest);
    console.log(labelSecondSmallest);

    }
);

推荐阅读