如何获取数组中第二小值的等效标签名称 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);
}
);
我正在使用 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);
}
);