如何获取数组中第二小值的等效标签名称 Javascript

How to get equivalent label name for second smallest value in array Javascript

我正在使用 google 地图 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 相反。我怎样才能 return 预期的字符串?

JS Fiddle: https://jsfiddle.net/pw23vbLm/7/

我认为问题是你没有存储最小值的标签,所以当最小值变成第二小值时,没有标签与之对应。添加一个 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);

    }
);