使用array.map处理坐标数组时如何同时获取最近点距离及其他属性
代码修改方案
核心修改逻辑:原来的实现只保留了距离计算结果,丢失了和原数据项的关联,所以需要在计算距离时就把距离值和对应的数据项绑定存储,后续处理时就能同时读取距离和任意额外属性。
修改后的完整代码如下:
// Data数组支持新增任意额外属性 Data : [ {id: "1", Point: "27.1597268, 40.6646601", A: "4"}, {id: "2", Point: "11.1640393, 49.6487153", A: "7"}, {id: "3", Point: "26.1539253, 42.6599287", A: "2"}, {id: "4", Point: "21.1597268, 44.6646601", A: "9"} ], // 处理逻辑修改 const validCoords = !!(coords.longitude && coords.latitude); const distances = validCoords ? this.state.Data .map(item => { const distance = getPreciseDistance(coords, item.Point); // 绑定距离和原数据项 return distance ? { distance, item } : null; }) .filter(Boolean) // 按距离从小到大排序 .sort((a, b) => a.distance - b.distance) // 渲染时同时取距离和额外属性 .map(({ distance, item }) => ( <Text key={item.id}>Distance: {distance} and A: {item.A},</Text> )) : []; // 如果只需要输出最近的一个点,排序后取第一项即可 const nearestPoint = validCoords ? distances[0] : null;
如果后续新增其他额外属性,直接从item字段中取对应属性名即可,不需要修改核心处理逻辑。
内容的提问来源于stack exchange,提问作者Caquibf
相关产品推荐
相关产品推荐

