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

如何简化含多个途经点的Google路由代码?

简化途经点处理的地图路线代码

嘿,你的代码里重复逻辑太多啦——每个switch分支几乎都是一样的内容,只是途经点数量不同。我们可以彻底去掉冗余的switch语句,用更通用的方式处理**任意数量(0到26个)**的途经点,让代码简洁又易维护:

function calculateAndDisplayRoute(directionsService, directionsDisplay) {
  // 解析途经点字符串为字典
  const waypointDict = parseStringToDictionary(document.getElementById('waypoints').value);
  
  // 将字典值批量转换为API要求的格式:[{location: "地点名称"}, ...]
  const waypoints = Object.values(waypointDict).map(location => ({ location }));
  
  // 统一构建路线请求参数
  const routeParams = {
    origin: document.getElementById('start').value,
    destination: document.getElementById('destination').value,
    travelMode: 'DRIVING',
    // 空数组会被API自动忽略,无需单独处理0个途经点的情况
    waypoints
  };
  
  // 发起路线请求,共用同一个回调逻辑
  directionsService.route(routeParams, function(response, status) {
    if (status === 'OK') {
      directionsDisplay.setDirections(response);
    } else {
      // 这里可以补充你的错误处理逻辑,比如提示用户路线获取失败
      // alert('路线加载失败:' + status);
    }
  });
}

简化思路说明:

  • 干掉冗余的switch分支:Google Maps Directions API允许waypoints传空数组,此时会直接生成起点到终点的路线,完全不需要单独写case 0的逻辑。
  • 批量转换途经点格式:用Object.values()拿到所有途经点的值,再通过map方法一键转换成API要求的{location: xxx}结构,不管是1个还是26个途经点都能自动适配。
  • 提取重复代码:把路线请求的参数和回调函数统一抽离,避免每个分支重复写几乎一样的代码——后续要修改出行方式、添加新参数,只需要改一次就行。
  • 改用现代JS语法:用const替代var,避免变量提升带来的潜在问题,代码可读性更强。

另外,你的原始代码里case 0还多了一个多余的break;,简化后的代码也顺便修复了这个小问题。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:21:20