JavaScript实现:校验经纬度坐标是否在伦敦边界范围内
伦敦坐标边界校验代码梳理与优化
嘿,我来帮你理一理这段代码的逻辑,顺便给你提几个能让代码更靠谱的小建议:
你创建了coordsArray数组(因涉密已截断后续元素),核心需求是遍历数组里的坐标项,校验每个项的索引[1]和[2]对应的数值是否落在伦敦的地理边界框内。目前你写的代码片段是这样的:
var cityL = "ldn"; for (var i = 0; i < coordsArray.drugs.length; i++) { if(cityL == "ldn"){ if( 51.50408 <= coordsArray.drugs[i][1] && coordsArray.drugs[i][1] <= 51.42548 ... } }
核心逻辑拆解
这段代码的思路很清晰:先锁定目标城市为伦敦,然后逐个遍历coordsArray.drugs里的元素,检查元素的第2个值(索引[1])是否在伦敦纬度的上下限区间里——虽然代码截断了,但能猜到后面肯定还要加经度的边界判断对吧?
几个优化小技巧
把魔法数字换成命名常量
直接写51.50408这种数值太像“魔法数字”了,谁看了都不知道是什么意思。不如把伦敦的边界值提出来单独定义,代码可读性瞬间提升,后续修改边界也方便:const LONDON_LAT_MIN = 51.42548; const LONDON_LAT_MAX = 51.50408; // 假设你需要的经度边界示例 const LONDON_LON_MIN = -0.13809; const LONDON_LON_MAX = -0.06066;把城市判断移到循环外面
现在你每次循环都要判断一次cityL == "ldn",这完全是重复工作啊!把这个判断移到循环前面,只判断一次就够了:const cityL = "ldn"; // 先定义边界常量... if (cityL === "ldn") { for (let i = 0; i < coordsArray.drugs.length; i++) { const currentCoord = coordsArray.drugs[i]; const lat = currentCoord[1]; const lon = currentCoord[2]; // 完整的边界判断 if (LONDON_LAT_MIN <= lat && lat <= LONDON_LAT_MAX && LONDON_LON_MIN <= lon && lon <= LONDON_LON_MAX) { // 这里写坐标符合条件时的处理逻辑 console.log(`第${i}个坐标在伦敦范围内`); } } }用let/const代替var
现在JS里推荐用let和const来声明变量,比var的作用域更清晰,能避免很多莫名其妙的bug。加个类型校验更稳妥
如果coordsArray.drugs里的元素可能为空或者不是数字,最好加个类型判断,防止出现NaN导致的判断异常:if (typeof lat === 'number' && typeof lon === 'number') { // 再做边界判断 }
内容的提问来源于stack exchange,提问作者Overtime
相关产品推荐
相关产品推荐

