You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用geolib基于经纬度筛选数组对象时过滤失效问题求助

使用geolib基于经纬度筛选数组对象时过滤失效问题求助

嘿,我一眼就看出你代码里的问题啦!你现在不管搜索哪个位置都返回全部房屋,核心原因是**filter方法的使用有误**——它不会修改原数组,而是返回一个过滤后的新数组,但你目前并没有把这个新数组存下来,最后还是把原数组传给了setHouses,自然起不到过滤效果。

咱们来修改一下你的updateHouses函数:

const updateHouses = (coords) => {
  const lng = coords[0];
  const lat = coords[1];
  // 直接对原数组的浅拷贝执行filter,并接收返回的新数组
  const filteredHouses = [...houses].filter((house) => {
    const dis = getPreciseDistance(
      { latitude: house.lat, longitude: house.long },
      { latitude: lat, longitude: lng }
    );
    const km = dis / 1000;
    return km < 200;
  });
  // 把过滤后的数组传给setHouses
  setHouses(filteredHouses);
};

简单解释下:

  • [...houses]是对原数组做浅拷贝,避免直接修改原状态
  • filter执行后会生成一个只包含符合条件(距离<200km)的新数组,我们把它存在filteredHouses里
  • 最后用这个过滤后的数组更新状态,就能得到你想要的结果了

另外可以额外检查两个小细节:

  • 确认你的房屋对象里的经度字段是long还是lng,如果数据里是lng而你写了house.long,会导致距离计算出错(不过这种情况一般会返回空数组,和你现在的问题不太一样,但还是确认下更稳妥)
  • 可以在filter里加个console.log(km),看看实际计算出的距离是不是符合预期,排查下geolib的调用有没有问题

备注:内容来源于stack exchange,提问作者Captai-N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:29:07