JavaScript数组解析与字符串构造:多中间名缩写功能实现问题
问题排查
你的代码存在两个核心逻辑错误导致多中间名测试不通过:
- 条件判断语句错误:
if (name.length = 2)首先误用赋值运算符=代替比较运算符,其次错误判断原字符串长度,应该判断拆分后的姓名数组长度,数组长度≤2时(单名、仅有名和姓)直接返回原姓名即可。 - 循环内赋值逻辑错误:每次遍历中间名时都会覆盖
output的值,仅保留当前遍历到的中间名缩写,之前的中间名缩写会被直接覆盖,自然只能拿到最后一个中间名的缩写结果。
优化后可通过所有用例的代码
function initializeNames(name) { const nameArr = name.split(' '); // 少于3个组成部分的姓名直接返回原内容 if (nameArr.length <= 2) return name; // 提取首名和姓氏 const firstName = nameArr[0]; const lastName = nameArr.at(-1); // 所有中间名统一转为首字母缩写 const middleAbbrs = nameArr.slice(1, -1).map(item => `${item[0]}.`); // 拼接所有部分返回结果 return [firstName, ...middleAbbrs, lastName].join(' '); }
验证说明
上述代码可覆盖所有测试用例:
- 单名
Dimitri:数组长度为1,直接返回原内容 - 两部分姓名
Jack Ryan:数组长度为2,直接返回原内容 - 单个中间名
Lois Mary Lane:中间名处理为M.,拼接后得到Lois M. Lane - 多个中间名
Alice Betty Catherine Davis:中间名处理为B.和C.,拼接后得到Alice B. C. Davis
内容的提问来源于stack exchange,提问作者Jonathan Joseph
相关产品推荐
相关产品推荐

