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

求助:实现提取姓名数组中间名的函数,splice方法使用遇阻

解决getMiddleNames函数的实现问题

我完全理解你尝试许久却卡壳的挫败感!咱们来一步步拆解这个需求,搞定这个函数。

首先明确需求:

  • 输入:一个包含完整姓名的数组,每个姓名由空格分隔(比如 ["John Michael Doe", "Jane Smith", "Robert James William Brown"])
  • 输出:对应每个姓名的中间名数组,没有中间名的位置填充null;如果有多个中间名,将它们拼接成一个字符串(比如第三个姓名的中间名是 "James William")

你的核心问题分析

你提到splice方法使用无效,大概率是因为没有正确处理分割后的姓名数组,或者误用了splice的参数(splice(startIndex, deleteCount)),也可能是没考虑到splice会直接修改原数组的特性,导致后续逻辑出错。

完整实现代码

function getMiddleNames(names) {
  const solution = [];
  
  for (const name of names) {
    // 去除首尾空格,用正则分割处理可能的多空格情况
    const nameParts = name.trim().split(/\s+/);
    
    // 判断是否存在中间名:姓名拆分后长度≤2时,无中间名
    if (nameParts.length <= 2) {
      solution.push(null);
    } else {
      // 复制拆分后的数组,避免splice修改原数组影响后续判断
      const partsCopy = [...nameParts];
      // 从索引1开始,删除「总长度-2」个元素(跳过首名和末名)
      const middleNames = partsCopy.splice(1, nameParts.length - 2);
      // 把多个中间名拼接成字符串(若只有一个则直接返回该字符串)
      solution.push(middleNames.join(' '));
    }
  }
  
  return solution;
}

关键步骤解释

  1. 安全分割姓名:用trim()清理首尾空格,再用/\s+/正则分割,能兼容姓名中不小心输入的多个空格,确保拆分后的数组是干净的姓名片段。
  2. 判断中间名存在性:如果拆分后的数组长度≤2,说明只有名和姓(甚至只有单个姓名片段),这种情况直接填充null。
  3. 正确使用splice:
    • 先通过扩展运算符复制数组,避免splice修改原数组导致的意外问题;
    • splice(1, nameParts.length - 2)精准定位中间名:从索引1(跳过首名)开始,删除「总长度-2」个元素(减去首名和末名的数量),返回的结果就是所有中间名组成的数组。
  4. 拼接多中间名:如果存在多个中间名,用join(' ')拼接成符合常规表达的字符串,单个中间名则直接返回该字符串。

测试示例

// 测试用例
console.log(getMiddleNames(["John Michael Doe", "Jane Smith", "Robert James William Brown", "Alice"]));
// 输出:["Michael", null, "James William", null]

如果需要调整细节(比如希望中间名返回数组而非字符串),只需要去掉join(' '),直接把middleNames推入结果数组即可~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:27