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

使用Map方法反转奇数长度元素时丢失'T'字符的问题

问题分析与解决:反转奇数长度字符串元素时的字符重复问题

你的代码在处理包含重复字符的奇数长度字符串(比如"Three")时出错,核心原因是使用el.indexOf(el1)获取字符索引——该方法只会返回第一个匹配字符的索引,导致重复字符无法正确映射到反转后的位置。

以"Three"为例:原字符串字符索引为T(0)、h(1)、r(2)、e(3)、e(4),当遍历到第二个'e'时,el.indexOf('e')仍返回3,计算出的目标索引为5-3-1=1,对应原字符串的'h',最终错误生成['e','e','r','h','h'],而正确的反转结果应该是['e','e','r','h','T']。

修正后的代码

let name = "One Two Three Four";
let newMap = name.split(" ").map(el => {
  const chars = el.split("");
  if (el.length % 2 !== 0) {
    // 利用map的索引参数i,直接计算反转后的对应位置
    return chars.map((_, i) => chars[chars.length - 1 - i]);
  } else {
    // 偶数长度直接返回原字符数组,无需额外映射
    return chars;
  }
});
console.log(newMap);
// 输出:[ ['e','n','O'], ['o','w','T'], ['e','e','r','h','T'], ['F','o','u','r'] ]

关键优化点

  • 用chars变量存储拆分后的字符数组,避免重复调用split方法
  • 反转逻辑依赖map的第二个参数i(当前元素的索引),通过chars.length - 1 - i直接定位反转后的字符,彻底规避indexOf的重复字符问题
  • 简化偶数长度字符串的处理逻辑,直接返回原数组即可

如果需要将结果转回字符串数组,可追加一步处理:

let result = newMap.map(arr => arr.join(""));
console.log(result);
// 输出:[ 'enO', 'owT', 'eerhT', 'Four' ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:01:19