我需要将一个带有名称的字符串转换为一个名称和首字母以逗号分隔的字符串。
示例
Any-Name Tom, Name Brian Joe, Smith Judie, et al.
Any-Name T., Name Brian J., Smith J., et al.
Any-Name T, Name B J, Smith J, et al.
Any-Name Tom,Name Brian Joe,Smith Judie, et al.
...应该都得到
Any-Name T, Name BJ, Smith J, et al.
等
是可选的。所以...
Any-Name Tom, Name Brian Joe, Smith Judie
...应该得到
Any-Name T, Name BJ, Smith J
我尝试这样做:
var names = string.split(",");
names.forEach(function(name) {
name = name.trim();
var parts = name.split(" ");
parts.forEach(function(part, index) {
if (index > 0) {
var initial = part.slice(0,1);
// get upper case
}
});
});
但这似乎有点复杂......
最佳答案
你快完成了。
此提案使用 Array#reduce
用于连接名称的各个部分并应用所需的大写首字母。
如有必要,'et al'
可以用大写字符串进行检查。如果找到,则稍后将其添加到结果中。
function reName(string) {
var names = string.split(","),
etal = names[names.length - 1].indexOf('et al') !== -1 ? names.pop().trim() : '',
condensed = names.map(function (name) {
return name.trim().split(" ").reduce(function (r, part, index) {
return index ? r + part[0].toUpperCase() : part + ' ';
}, '');
});
etal && condensed.push(etal);
return condensed.join(', ');
}
console.log(reName('Any-Name Tom, Name Brian Joe, Smith Judie'));
console.log(reName('Any-Name Tom, Name Brian Joe, Smith Judie, et al.'));
关于javascript - 将带有可选全名的字符串转换为姓名和首字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265247/