JavaScript姓名列表格式化函数实现求助(Codewars题型)
分析你的代码问题 & 正确实现方案
先聊聊你当前代码里的几个核心问题:
- 没有返回目标字符串,误用了
console.log:题目明确要求函数返回格式化后的结果,但你的代码只是把内容打印出来,完全没有返回值,这是最关键的错误。 - 数组操作逻辑混乱:
- 用
shift()会直接修改原输入数组(这是不推荐的副作用操作),而且你只处理了第一个元素就停止,剩下的元素完全没遍历处理。 - 第二个判断里的
names.name完全错误——names是数组,不是单个对象,要访问元素的name应该用names[0]?.name才对。
- 用
- 边界情况处理不全:比如空数组时,第二个判断会触发,打印出
&undefined;三个及以上元素的场景也完全没覆盖到。
正确实现思路 & 代码
我们可以先把输入数组里的所有name提取成纯字符串数组,再根据长度分场景处理:
function list(names) { // 先提取所有姓名到纯字符串数组 const nameList = names.map(person => person.name); // 分情况处理 if (nameList.length === 0) return ''; if (nameList.length === 1) return nameList[0]; if (nameList.length === 2) return nameList.join(' & '); // 处理3个及以上姓名的情况:前n-1个用逗号连接,最后用&拼接最后一个 return `${nameList.slice(0, -1).join(', ')} & ${nameList.at(-1)}`; }
测试验证
用题目给的示例测试:
list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])→ 返回'Bart, Lisa & Maggie'list([ {name: 'Bart'}, {name: 'Lisa'} ])→ 返回'Bart & Lisa'list([ {name: 'Bart'} ])→ 返回'Bart'list([])→ 返回''
完全符合题目要求~
内容的提问来源于stack exchange,提问作者john_doe_221
相关产品推荐
相关产品推荐

