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

JavaScript获取两个字母中间字母的函数返回错误结果,请求排查

问题分析与修复

你的函数核心问题在于**slice方法的第二个参数未包含目标字母**,以及范围计算时的边界错误:

具体问题点

  1. slice的截断范围错误:Array.slice(start, end)的end参数是排他的,也就是说它只会截取到end-1索引的元素。你的代码里用alphabetArr.indexOf(lastLetter)作为end,导致最终的alphabetRange没有包含lastLetter,直接导致后续中间字母计算全部偏移。

    • 比如调用findMiddleAlphabet('Q', 'U')时,Q的索引是16,U是20,slice(16,20)得到的是['Q','R','S','T'],漏掉了U;
    • 调用findMiddleAlphabet('R', 'U')时,slice(17,20)得到['R','S','T'],漏掉了U。
  2. 边界情况处理缺失(可选优化):如果传入的firstLetter索引大于lastLetter(比如传'U'和'Q'),slice会返回空数组,直接返回空字符串,这不符合常规需求,最好先统一索引的顺序。

修复后的代码

const findMiddleAlphabet = (firstLetter, lastLetter) => {
    const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    const startIdx = alphabet.indexOf(firstLetter);
    const endIdx = alphabet.indexOf(lastLetter);
    
    // 处理字母顺序颠倒的情况,确保start <= end
    const minIdx = Math.min(startIdx, endIdx);
    const maxIdx = Math.max(startIdx, endIdx);
    
    // 修正slice的end参数,+1以包含最后一个字母
    const alphabetRange = [...alphabet].slice(minIdx, maxIdx + 1);

    if (!alphabetRange.length) return '';

    const mid = alphabetRange.length / 2;
    if (alphabetRange.length % 2 === 1) {
        // 奇数长度,返回正中间的字母
        return alphabetRange[Math.floor(mid)];
    } else {
        // 偶数长度,返回中间两个字母
        return alphabetRange[mid - 1] + alphabetRange[mid];
    }
}

console.log(findMiddleAlphabet('Q', 'U')); // 输出: S
console.log(findMiddleAlphabet('R', 'U')); // 输出: ST
console.log(findMiddleAlphabet('U', 'Q')); // 额外测试: S

验证结果

  • 调用findMiddleAlphabet('Q', 'U'):范围是['Q','R','S','T','U'],长度5,中间索引2,对应字母S,符合预期;
  • 调用findMiddleAlphabet('R', 'U'):范围是['R','S','T','U'],长度4,中间两个索引1和2,对应字母S和T,拼接后为ST,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:54:26