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

使用reduce与substring计算单词数组字符长度时首元素方法未生效

问题分析与修正

你的代码核心问题出在reduce的使用逻辑上:

  • 没给reduce设置初始值,导致第一次迭代时prev是第一个单词处理后的字符串,后续迭代会把所有处理后的字符串拼接起来,最后再取总长度——虽然结果可能对,但逻辑绕了弯路,且数组为空时会直接报错。
  • 更高效合理的方式是直接累加每个单词截取后的长度,而非先拼接再算长度。

修正后的代码

let arrayWords = ["comput3r-9", "b0dywork-7", "e4rth-1"];
let getTotalCharacters = (x) => x.reduce(
    (prev, curr) => prev + curr.substring(0, curr.length - 2).length,
    0 // 必须设置初始值0,确保prev从数字类型开始累加
);

console.log(getTotalCharacters(arrayWords)); // 输出:20

计算验证

逐个单词核对截取后的长度:

  • "comput3r-9" 去掉最后2个字符("-9"),剩余"comput3r",长度为8
  • "b0dywork-7" 去掉最后2个字符("-7"),剩余"b0dywork",长度为8
  • "e4rth-1" 去掉最后2个字符("-1"),剩余"e4rth",长度为4
    总和:8+8+4=20,与代码输出一致。

原代码的“假失效”原因

原代码执行后其实会得到拼接字符串"comput3rb0dyworke4rth",它的length也是20,结果是对的,但逻辑不够直接,且空数组场景下会抛出错误。加上初始值并直接累加长度才是更健壮、高效的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:45:41