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

使用map或reduce时substring方法异常,是否存在用法错误?

问题原因与解决方案:substring单参数用法误解导致的无效果问题

问题原因

你混淆了substring和其他字符串截取方法的行为逻辑:

  • substring(startIndex)的作用是从startIndex指定的位置开始,截取到字符串的末尾,并非从字符串末尾取startIndex个字符。
  • 你代码里的x.substring(1),实际是保留字符串从第2个字符(索引从0开始)到末尾的全部内容,所以原字符串几乎没有变化,才会得到和原数组近乎一致的结果。
  • 而substring(0,1)是从索引0截取到索引1(不包含),能正确得到第一个字符,符合预期。

解决方案

要实现“取字符串最后1个字符”的需求,有以下几种可行方法:

方法1:使用slice(-n)

slice支持负索引,slice(-1)表示从字符串倒数第1个位置开始截取到末尾,正好取最后一个字符:

let a = [["g9qleb3ycfzs2rgrqebjtqol",1],["amjjvjvz3d7hvl7eu9k9alfj",1]]

let b = a.reduce((p,[x, y]) => [ ...p, [ x.slice(-1), y ] ],[])
let c = a.map(([x, y]) => [ x.slice(-1), y ]);

// 输出:[["l",1],["j",1]]
console.log(b) 
console.log(c)

方法2:使用substring结合字符串长度

通过x.length-1定位到最后一个字符的索引,再用substring截取:

let a = [["g9qleb3ycfzs2rgrqebjtqol",1],["amjjvjvz3d7hvl7eu9k9alfj",1]]

let b = a.reduce((p,[x, y]) => [ ...p, [ x.substring(x.length - 1), y ] ],[])
let c = a.map(([x, y]) => [ x.substring(x.length - 1), y ]);

// 输出:[["l",1],["j",1]]
console.log(b) 
console.log(c)

方法3:使用charAt

charAt(index)可以直接获取指定索引的字符,传入x.length-1就能拿到最后一个字符:

let a = [["g9qleb3ycfzs2rgrqebjtqol",1],["amjjvjvz3d7hvl7eu9k9alfj",1]]

let b = a.reduce((p,[x, y]) => [ ...p, [ x.charAt(x.length - 1), y ] ],[])
let c = a.map(([x, y]) => [ x.charAt(x.length - 1), y ]);

// 输出:[["l",1],["j",1]]
console.log(b) 
console.log(c)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:11:21