判断坐标所属多边形的函数在循环中运行异常求助
问题分析与修复
核心错误点
- 循环提前终止:
findZone函数在循环的第一次迭代就会执行return语句,不管结果如何,导致第二个多边形永远不会被检查。比如第一次处理第一个多边形时,result不是-1,直接进入else返回"womp",循环直接结束,根本轮不到第二个多边形。 - 赋值操作替代相等判断:条件里的
(i = 0)是赋值语句,不是相等比较,应该用严格相等i === 0和i === 1。 - 未声明的全局变量:
for循环里的i没有用let或const声明,会变成全局变量,可能引发其他意外问题。
修复后的代码
const zones = [ [[-104, 47], [-100, 47], [-100, 50], [-104, 45]], [[-74, 50], [-80, 47], [-74, 45], [-70, 47]] ]; function findZone(long, lat) { // 用let声明i,避免全局变量污染 for (let i = 0; i < zones.length; i++) { const zone = zones[i]; const result = classifyPoint(zone, [long, lat]); console.log(`多边形${i}的判断结果:`, result); // 先判断点是否在当前多边形内 if (result === -1) { // 再根据多边形索引返回对应结果 if (i === 0) { return "try again :("; } else if (i === 1) { return "YAHOO"; } } } // 所有多边形都检查完仍未匹配,返回womp return "womp"; } console.log(findZone(-73.5698065, 45.5031824));
修复说明
- 将
return "womp"移到循环外部,确保所有多边形都被检查后才返回该结果。 - 把条件中的赋值操作
i = 0改为严格相等判断i === 0,修正逻辑错误。 - 用
let声明循环变量i,限制其作用域在循环内,避免全局变量引发的意外问题。 - 调整判断逻辑顺序:先确认点在当前多边形内,再根据索引返回对应信息,逻辑更清晰。
内容的提问来源于stack exchange,提问作者mrbob
相关产品推荐
相关产品推荐

