如何用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
相关产品推荐
相关产品推荐

