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

如何用JavaScript将多作者名字字符串转换为「姓氏, 名字」格式?

需求说明

我有一个包含书籍作者姓名的字符串:

"John Doe, Jim Smith, Jane Elizabeth Doe"

需要将其转换为如下格式的输出字符串:

'"Doe, John", "Smith, Jim", "Doe, Jane Elizabeth"'
已实现的单作者转换代码
let fullName = "John Doe";
let pieces = fullName.split(" ");
var lastName, firstName; 
  if (pieces.length >= 2) {
    firstName = pieces[0];
    lastName = pieces[pieces.length - 1];
  } else {
    firstName = pieces[0];
    lastName = "";
  }
let lastFirst = '"' + lastName + ", " + firstName + '"';
多作者处理的瓶颈代码
let fullName = "John Doe, Jim Smith, Jane Elizabeth Doe";
  if (fullName.includes(",")) {
    let author = fullName.split(", ");
    var arrayLength = author.length;
    for (var i = 0; i < arrayLength; i++) {
        let pieces = author[i].split(" ");
    }
  }
解决方案

把单作者的转换逻辑封装成函数,对多作者数组的每个元素调用该函数,最后拼接结果即可,同时优化中间名的处理逻辑:

// 封装单作者姓名转换函数
function formatAuthorName(fullName) {
  let pieces = fullName.split(" ");
  let lastName, firstName; 
  if (pieces.length >= 2) {
    // 处理带中间名的情况:除最后一个元素外,其余拼接为firstName
    firstName = pieces.slice(0, pieces.length - 1).join(" ");
    lastName = pieces[pieces.length - 1];
  } else {
    firstName = pieces[0];
    lastName = "";
  }
  return `"${lastName}, ${firstName}"`;
}

// 处理多作者字符串
let authorsStr = "John Doe, Jim Smith, Jane Elizabeth Doe";
let authorsArray = authorsStr.split(", ");
// 批量转换后拼接成目标格式
let formattedStr = `'${authorsArray.map(formatAuthorName).join(", ")}'`;

console.log(formattedStr);
// 输出:'"Doe, John", "Smith, Jim", "Doe, Jane Elizabeth"'

关键说明

  • 封装函数实现逻辑复用,后续修改转换规则只需调整函数内部即可。
  • 针对带中间名的作者,用slice截取除姓氏外的所有部分作为名字,解决原单作者代码只取第一个单词的局限。
  • 使用map遍历数组批量转换,比for循环更简洁易读,最后用join完成拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:10:28