我正在编写一些代码来转换一些输入名称(例如:John Doe-> J. Doe),却不知道输入名称的长度(可以是John Williams Roger Fred Doe,即J. W. R. F. Doe)。
我想出了输入2个名字的算法,但是我找不到找到覆盖其余情况的有效方法。我想到的唯一方法是在某些if语句中将其余的案例最多包含10个名称。还有其他有效的方法吗?预先感谢!
function convertName(name) {
var [a, b] = name.split(" ");
var c = `${a[0]}${". "}${b}`;
return c;
}
答案 0 :(得分:1)
我认为您想要这样的东西:
function convertName(name) {
const nameArray = name.split(" ")
return nameArray
.map((name, index) => index !== nameArray.length - 1 ? `${name[0]}.` : name)
.join(' ')
}
这是怎么回事?
.map()
迭代一个数组并返回一个新数组,它可能需要1或2个args,项和索引(按此顺序)Array.map()
index !== nameArray.length - 1
,请确保它不是索引中的最后一项,因为您需要全部
? ${name[0]}.
(如果不是最后一项),则截短
: name
(如果是),将其完整保留.join(' ')
将数组.map()
返回,返回为单个字符串此函数并不关心名称中有多少部分,它还处理单个部分名称,即:"John Snow The One" => "J. S. T. One"
而"John" => "John"
答案 1 :(得分:0)
您可以使用pop()
删除姓氏。然后map()
将其余部分转换为缩写。最后将所有内容放在一起:
function convertName(name) {
var names = name.trim().split(" ");
let last = names.pop()
return [...names.map(s => s[0]), last].join(". ")
}
console.log(convertName("John Williams Roger Fred Doe"))
console.log(convertName("John Doe"))
console.log(convertName(" Doe"))
您可能要检查诸如单个名称之类的边缘情况。
答案 2 :(得分:0)
您可以使类似这样的内容,易于理解。
function convertName(name) {
var arrayNames = name.split(" "); // Create an array with all the names
// loop on all the name except the last one
for (var i = 0; i < arrayNames.length - 1; i++) {
arrayNames[i] = arrayNames[i].charAt(0).concat(".") // Keeping the first letter and add the dot
}
return arrayNames.join(" "); // join all the array with a ' ' separator
}
console.log(convertName("John Williams Roger Fred Doe"))
console.log(convertName("John Doe"))