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

判断坐标所属多边形的函数在循环中运行异常求助

问题分析与修复

核心错误点

  1. 循环提前终止:findZone函数在循环的第一次迭代就会执行return语句,不管结果如何,导致第二个多边形永远不会被检查。比如第一次处理第一个多边形时,result不是-1,直接进入else返回"womp",循环直接结束,根本轮不到第二个多边形。
  2. 赋值操作替代相等判断:条件里的(i = 0)是赋值语句,不是相等比较,应该用严格相等i === 0和i === 1。
  3. 未声明的全局变量: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:25:57