JavaScript如何访问字符串后续字符 实现首字母缩写生成函数
JavaScript首字母缩写生成函数故障排查与实现
原有代码问题定位
代码运行后仅返回首字母'N',是几个逻辑错误共同导致的:
- 函数提前返回:循环第一次执行时,字符串首位不是空格,直接触发
return abbreviation.toUpperCase().charAt(0)语句,函数直接终止运行,后续循环逻辑完全不会执行,这是只能拿到单个首字符的核心原因 - 空格判断失效:
words[i]!==''的判断永远为真,单个字符不可能是空字符串,判断空格的正确写法是words[i] === ' ' - 字符取值逻辑错误:空格分支里的
words.charAt()没有传入索引参数,默认只会取字符串第0位的字符,根本无法获取空格后的首字母 - 初始赋值逻辑偏差:一开始将
abbreviation赋值为修剪后的完整原字符串,后续没有基于这个变量做正确的首字母提取拼接
正确实现思路
核心逻辑就是提取所有单词的首字母,有两种易理解的实现路径:
遍历字符法
- 先去除输入字符串首尾的多余空格,避免首尾空格干扰提取
- 先把字符串的第一个字符存入缩写结果
- 遍历整个字符串,每当检测到空格字符,就取出空格后紧邻的第一个字符,拼接到缩写结果中
- 最后把拼接完成的结果统一转为大写返回
对应实现代码:
function makeAbbr(words) { const trimmedStr = words.trim(); if (!trimmedStr) return ''; let abbr = trimmedStr[0]; for (let i = 0; i < trimmedStr.length; i++) { // 遇到空格且不是最后一位时,取后一位字符拼接 if (trimmedStr[i] === ' ' && i + 1 < trimmedStr.length) { abbr += trimmedStr[i + 1]; } } return abbr.toUpperCase(); } // 测试:传入'National Aeronautics Space Administration'会正确返回NASA console.log(makeAbbr('National Aeronautics Space Administration'));
数组分割法(更简洁)
直接把字符串按空白字符分割为单词数组,过滤掉空值后取每个单词首字母拼接即可,还能自动兼容多个连续空格、制表符等特殊空白场景:
function makeAbbr(words) { return words.trim() .split(/\s+/) // 正则匹配任意长度空白字符做分割 .map(word => word[0]) .join('') .toUpperCase(); }
内容的提问来源于stack exchange,提问作者Yashar Baradarvar
相关产品推荐
相关产品推荐

