JavaScript:通过for循环处理含多问号URL,保留除最后段外的内容
处理URL保留最后一个问号前内容的解决方案
你的原代码存在几个关键问题,导致无法实现需求:
- 每次循环都重复调用
url.split("?"),没必要重复计算,影响性能 - 循环条件
i <= url.split("?").length会触发数组越界(数组索引从0开始,长度为n的数组最大索引是n-1) - 每次赋值
urlTotal = ...都会覆盖之前的结果,最终只能得到最后一段加问号,完全达不到拼接前n-1段的效果
下面是符合你要求的、结合String.split()和for循环的实现方式:
let url = 'https://xxx?yyy?zzz?jjj?hhh'; let urlTotal = ''; if (url.includes("?")) { // 先拆分一次URL,把结果存起来避免重复计算 const segments = url.split("?"); // 循环遍历前n-1个分段(n是拆分后的数组长度) for (let i = 0; i < segments.length - 1; i++) { // 拼接当前分段 urlTotal += segments[i]; // 只有不是最后一个要保留的分段时,才加问号 if (i !== segments.length - 2) { urlTotal += "?"; } } } console.log(urlTotal); // 输出: https://xxx?yyy?zzz?jjj
如果不需要严格用for循环,也可以用更简洁的写法,拆分后取前n-1个分段再用问号连接:
let url = 'https://xxx?yyy?zzz?jjj?hhh'; let urlTotal = url; if (url.includes("?")) { const segments = url.split("?"); urlTotal = segments.slice(0, segments.length - 1).join("?"); } console.log(urlTotal);
内容的提问来源于stack exchange,提问作者Manuel Yerbes
相关产品推荐
相关产品推荐

