javascript - For循环后返回排序数组
问题描述
我试图通过使用npm geolib来获取到 lat|long 坐标之间的距离。我有一个函数,可以在其中查询 firestore 并返回一组对象。然后我通过一个 for 循环运行该数组,在该循环中我调用geolib.getPreciseDistance
以获取数组中每个对象的距离。
我很难从 for 循环中获得一个排序数组作为回报。在理想情况下,新数组将使用 index[0] 中距离最近的对象进行排序。
我已经在下面发布了。我感谢任何和所有反馈,因为我仍在学习。谢谢!
function getNearestWalk() {
let currentLng = userLocation.longitude;
let currentLat = userLocation.latitude;
firestore()
.collection('Walks')
.where('status', '==', 'started')
.limit(10)
.get()
.then((walks) => {
const walksArray = [];
walks.forEach((liveWalks) => {
walksArray.push(liveWalks.data());
});
console.log(walksArray);
for (var i = 0; i < walksArray.length; i++) {
geolib.getPreciseDistance(
{ latitude: currentLat, longitude: currentLng },
{
latitude: walksArray[i].latitude,
longitude: walksArray[i].longitude,
}
);
}
});
}
解决方案
根据我在您对@Elnatan 的回复中收集到的信息,听起来您想要一组表示按最短...最远距离排序的坐标的对象
最直接的方法(不考虑复杂性)如下:
- 创建一个辅助函数
distCalc
,该函数接受一个对象来执行调用geolib.getPreciseDistance
并返回其值的循环逻辑。 - 然后,您可以设置一个指向以下评估的变量:
walksArray.sort( (a, b) => distCalc(a) - distCalc(b) )
- 返回您的排序数组。
就个人而言,我会在您#getNearestWalk
的最佳实践中将关注点分开,并创建一个辅助函数来获取您的步行,以便实现有效的错误处理,try {} catch {}
因为不能保证异步调用。
让我知道这是否适合您!
推荐阅读
- database-design - 同一张表之间的一对一和一对多关系
- flutter - 在 Flutter 函数问题中动态计算列表的总和
- pandas - 按列过滤熊猫并随机化
- python - Tkinter 更改标签中的图像
- python - 无法使用来自 drf-extensions 的 mixin
- css - Bootstrap 5 导航栏位置元素
- json - JSON 列表在 SwiftUI 中不可见
- .net - 如何检查客户的 PC 是否存在 .Net 相关的 DLL?
- python - 如何将私钥和公钥存储到python的rsa模块生成的pem文件中
- android - How to restrict Android.mk to compile a module to generate only 64bit library