排序多个JavaScript数组
我在哈弗森公式的帮助下创建了这个脚本,问题是它一直将我指向数组中的第一个位置,无论我交换它们多少次。有什么想法吗排序多个JavaScript数组,javascript,arrays,html,geolocation,haversine,Javascript,Arrays,Html,Geolocation,Haversine,我在哈弗森公式的帮助下创建了这个脚本,问题是它一直将我指向数组中的第一个位置,无论我交换它们多少次。有什么想法吗 var locations = new Array( Array("Brighton", 50.82253, -0.137163), Array("Chichester", 50.83761, -0.774936), Array("Portsmouth", 50.8166667, -1.0833333), Array("Worthing", 50.81787, -0.
var locations = new Array(
Array("Brighton", 50.82253, -0.137163),
Array("Chichester", 50.83761, -0.774936),
Array("Portsmouth", 50.8166667, -1.0833333),
Array("Worthing", 50.81787, -0.372882)
);
function deg2rad(degrees){
radians = degrees * (Math.PI/180);
return radians;
}
function haversine(lat1,lon1,lat2,lon2) {
deltaLat = lat2 - lat1;
deltaLon = lon2 - lon1;
earthRadius = 3959; // In miles (6371 in kilometers)
alpha = deltaLat/2;
beta = deltaLon/2;
a = Math.sin(deg2rad(alpha)) * Math.sin(deg2rad(alpha))
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.sin(deg2rad(beta)) * Math.sin(deg2rad(beta));
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
distance = earthRadius * c;
return distance.toFixed(2);
}
function locationSuccess(position) {
var places = new Array();
var userLatitude = position.coords.latitude;
var userLongitude = position.coords.longitude;
for(var i=0;i<locations.length;i++) {
places.push(haversine(
userLatitude,
userLongitude,
locations[i][1],
locations[i][2]
));
}
var sorted = places.sort(); // Sort places from low to high
/*
alert(places); // Listed distances unordered
alert(sorted); // Listed distances in order
alert(sorted[0]); // Nearest city distance
*/
}
function locationFailed() {
// Change me to a better error message
alert("Ooops, we couldn't find you!");
}
// Get user's physical location
navigator.geolocation.getCurrentPosition(locationSuccess, locationFailed);
var位置=新数组(
阵列(“布莱顿”,50.82253,-0.137163),
数组(“奇切斯特”,50.83761,-0.774936),
阵列(“朴茨茅斯”,50.8166667,-1.0833333),
数组(“沃辛”,50.81787,-0.372882)
);
功能deg2rad(度){
弧度=度*(数学PI/180);
返回弧度;
}
功能haversine(lat1、lon1、lat2、lon2){
deltaLat=lat2-lat1;
deltaLon=lon2-lon1;
地球半径=3959;//以英里(6371公里)为单位
α=deltaLat/2;
β=deltaLon/2;
a=数学sin(deg2rad(alpha))*数学sin(deg2rad(alpha))
+数学cos(deg2rad(lat1))*数学cos(deg2rad(lat2))
*Math.sin(deg2rad(beta))*Math.sin(deg2rad(beta));
c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
距离=接地半径*c;
返回距离。toFixed(2);
}
功能定位成功(职位){
var places=新数组();
var userLatitude=position.coords.latitude;
var userLongitude=position.coords.longitude;
对于(var i=0;i您没有对位置数组进行排序,只对距离数组进行排序
您应该将距离放入位置数组(即作为每个元素的第四个成员):
for(变量i=0;i
然后使用“比较器”函数查看该距离字段:
locations.sort(function(a, b) {
return (a[3] < b[3]) ? -1 : ((a[3] > b[3]) ? 1 : 0);
});
locations.sort(函数(a,b){
返回(a[3]b[3])?1:0);
});
您没有对位置数组进行排序,只对距离数组进行排序
您应该将距离放入位置数组(即作为每个元素的第四个成员):
for(变量i=0;i
然后使用“比较器”函数查看该距离字段:
locations.sort(function(a, b) {
return (a[3] < b[3]) ? -1 : ((a[3] > b[3]) ? 1 : 0);
});
locations.sort(函数(a,b){
返回(a[3]b[3])?1:0);
});
如果可以,我会的。7分钟后我才能接受。顺便说一句,你最后一段代码的第2行有语法错误。如果可以,我会的。7分钟后我才能接受。顺便说一句,你最后一段代码的第2行有语法错误。