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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:52:31