javascript - javascript按距离对位置的json进行排序
问题描述
我正在尝试找到三个最近的位置并在 html ( https://snag.gy/zSL4pO.jpg ) 上显示信息。
我能够找到最近的位置,但我无法再进一步。在 Java 中,我会创建一个位置列表,然后按距离对它们进行排序。用javascript完成这项工作的最简单方法是什么?
当前功能:
function nearestLocation(position) {
var myLocation;
var currentLng = position.coords.longitude
var currentLat = position.coords.latitude;
var locationLng;
var locationLat;
var dx;
var dy;
var distance;
var nearestAttraction = 15000; // ein extrem weit entfernter Ort (unrealistisch)
var locationID = 0;
for (var i = 0; i < 3; i++) {
myLocation = locations[i];
locationLng = myLocation[2];
locationLat = myLocation[1];
dx = 71.5 * (currentLng - locationLng);
dy = 111.3 * (currentLat - locationLat);
distance = Math.sqrt(dx * dx + dy * dy);
if (distance < nearestAttraction) {
nearestAttraction = distance;
locationID = i;
}
console.log('Distance ' + i + ': ' + distance);
}
localStorage.setItem('currentLat', currentLat);
localStorage.setItem('currentLng', currentLng);
localStorage.setItem('locationID', locationID);
showLocation(locationID, nearestAttraction);
}
谢谢你的帮助
解决方案
您可以使用 sort() 函数。
首先,制作一个数组。变种元素=[];
二、用json值填充数组
element.unshift({location:name,dist:distance});
或者
element.unshift([name,distance]);//这样会更快
第三,对数组进行排序。
element.sort(function(a,b){return b.dist-a.dist;});//with object {}.
element.sort(function(a,b){return b[1]-a[1];});
第四,想用就用。
element[0].place;//最近地点的名称。(对象)
element[0][0];//最近地点的名称。(数组)
--------结束-------- 如果你有任何问题,问我。
ps 使用 Math.hypot(); 而不是 Math.sqrt();//Math.hypot 更快,但对于旧版浏览器没有
推荐阅读
- terraform - 将地图列表更改为 terraform 中的格式化字符串
- ruby-on-rails - Rails 5 has_and_belongs_to_many 形式
- java - Java config.properties 文件不会保存
- mysql - 如何总结跨多个表的行大小
- php - Codeigniter - 使用用户数据进行数据库查询
- python - 限制浮点数(不是字符串)
- node.js - Use URL file when uploading to Stripe.fileUploads
- python - Is it possible to rewrite the outcome of 2*func(x) to be func(x) + func(x) in Python?
- c - 如何在 C 中创建 bcrypt 哈希并存储它们
- python - 如何在python中将一串文本分成2列