使用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
相关产品推荐
相关产品推荐

