首页 > 解决方案 > 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,
            }
          );
        }
      });
  }

标签: javascriptarrayssortingfor-loopreturn

解决方案


根据我在您对@Elnatan 的回复中收集到的信息,听起来您想要一组表示按最短...最远距离排序的坐标的对象

最直接的方法(不考虑复杂性)如下:

  • 创建一个辅助函数distCalc,该函数接受一个对象来执行调用geolib.getPreciseDistance并返回其值的循环逻辑。
  • 然后,您可以设置一个指向以下评估的变量:
    walksArray.sort( (a, b) => distCalc(a) - distCalc(b) )
  • 返回您的排序数组。

就个人而言,我会在您#getNearestWalk的最佳实践中将关注点分开,并创建一个辅助函数来获取您的步行,以便实现有效的错误处理,try {} catch {}因为不能保证异步调用。

让我知道这是否适合您!


推荐阅读