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

如何使用Object Literals优化含URL判断的Switch语句?

用对象字面量简化URL匹配逻辑

首先得明确:你原来的switch语句逻辑是错误的——switch (url as any)搭配case url.includes('trips')这种写法,本质是把完整URL和布尔值(includes返回true/false)做严格相等比较,几乎不可能匹配成功,实际所有情况都会走default,根本没实现你想要的判断逻辑。

接下来解决你的核心需求:用对象字面量简化匹配逻辑,关键是遍历对象的键,检查URL是否包含该键,而不是直接用URL当键。这里有两种靠谱的实现方式:

方式一:对象+遍历(明确匹配顺序)

export const getTravelInfo = () => {
  const url = window.location.href;
  const travelMap = {
    // 注意:把更具体的URL片段放在前面,避免被宽泛的片段提前匹配
    'sailing-trips': sailingTrips,
    'mini-trips': miniTrips,
    'trips': epicTrips
  };

  // 遍历对象的键,逐个检查URL是否包含该片段
  for (const key of Object.keys(travelMap)) {
    if (url.includes(key)) {
      return travelMap[key];
    }
  }

  // 没有匹配到任何片段时返回默认值
  return epicTrips;
};

方式二:数组维护匹配规则(更灵活)

如果需要频繁调整匹配顺序,用数组会更直观,不用依赖对象键的遍历顺序:

export const getTravelInfo = () => {
  const url = window.location.href;
  // 数组元素按「从具体到宽泛」的顺序排序
  const travelRules = [
    { fragment: 'sailing-trips', info: sailingTrips },
    { fragment: 'mini-trips', info: miniTrips },
    { fragment: 'trips', info: epicTrips }
  ];

  // 找到第一个匹配的规则
  const matchedRule = travelRules.find(rule => url.includes(rule.fragment));
  // 有匹配返回对应信息,否则返回默认值
  return matchedRule ? matchedRule.info : epicTrips;
};

为什么你的getTravelInfo2不生效?

你写的return travel[url]是试图用完整URL作为对象的键,但对象里的键是trips这类短字符串,两者完全不匹配,自然拿不到对应值。必须通过遍历检查每个键是否存在于URL中,才能实现你想要的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:12:21