Mat*_*ics 24 javascript jquery
我的要求是将名字缩写为,
Name = FirstName LastName
Initials = FL
Run Code Online (Sandbox Code Playgroud)
我可以用这个得到上面的结果,
var initials = item.FirstName.charAt(0).toUpperCase() +
item.LastName.charAt(0).toUpperCase();
Run Code Online (Sandbox Code Playgroud)
但现在我的要求被更改,好像名称只包含1个字或更多2个字,所以在下面的情况下,我如何根据我的要求获得缩写,
FullName = FU
FirstName MiddleName LastName = FL
1stName 2ndName 3rdName 4thName 5thName = 15
Run Code Online (Sandbox Code Playgroud)
如何从JS中的字符串中获取上述内容?
现在我只有item.Name字符串进来....
Sha*_*oor 37
为什么不喜欢正则表达式?
var name = 'Foo Bar 1Name too Long';
var initials = name.match(/\b\w/g) || [];
initials = ((initials.shift() || '') + (initials.pop() || '')).toUpperCase();
console.log(initials);Run Code Online (Sandbox Code Playgroud)
Van*_*esh 25
令我惊讶的是,所有答案都没有得到Array.reduce()很好的利用。
const getInitials = (fullName) => {\n const allNames = fullName.trim().split(\' \');\n const initials = allNames.reduce((acc, curr, index) => {\n if(index === 0 || index === allNames.length - 1){\n acc = `${acc}${curr.charAt(0).toUpperCase()}`;\n }\n return acc;\n }, \'\');\n return initials;\n}\nRun Code Online (Sandbox Code Playgroud)\n运行下面的代码片段来检查不同用例的缩写 -
\nconst getInitials = (fullName) => {\n const allNames = fullName.trim().split(\' \');\n const initials = allNames.reduce((acc, curr, index) => {\n if(index === 0 || index === allNames.length - 1){\n acc = `${acc}${curr.charAt(0).toUpperCase()}`;\n }\n return acc;\n }, \'\');\n return initials;\n}\nRun Code Online (Sandbox Code Playgroud)\r\nnjm*_*was 24
你可以使用这个速记js
"FirstName LastName".split(" ").map((n)=>n[0]).join(".");
Run Code Online (Sandbox Code Playgroud)
要仅获取名字和姓氏,您可以使用此简写功能
(fullname=>fullname.map((n, i)=>(i==0||i==fullname.length-1)&&n[0]).filter(n=>n).join(""))
("FirstName MiddleName OtherName LastName".split(" "));
Run Code Online (Sandbox Code Playgroud)
And*_*rea 22
检查以下getInitials功能:
var getInitials = function (string) {
var names = string.split(' '),
initials = names[0].substring(0, 1).toUpperCase();
if (names.length > 1) {
initials += names[names.length - 1].substring(0, 1).toUpperCase();
}
return initials;
};
console.log(getInitials('FirstName LastName'));
console.log(getInitials('FirstName MiddleName LastName'));
console.log(getInitials('1stName 2ndName 3rdName 4thName 5thName'));Run Code Online (Sandbox Code Playgroud)
函数用空格分隔输入字符串:
names = string.split(' '),
Run Code Online (Sandbox Code Playgroud)
然后得到第一个名字,并得到第一个字母:
initials = names[0].substring(0, 1).toUpperCase();
Run Code Online (Sandbox Code Playgroud)
如果有多个名称,则需要姓氏的第一个字母(位置中的一个names.length - 1):
if (names.length > 1) {
initials += names[names.length - 1].substring(0, 1).toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)
chi*_*ens 11
最短的一个班轮:
获取第一个和最后一个首字母: John Doe Smith => JS
name.match(/(\b\S)?/g).join("").match(/(^\S|\S$)?/g).join("").toUpperCase()
Run Code Online (Sandbox Code Playgroud)
获取所有首字母: "John Doe Smith" => "JDS"
name.match(/(\b\S)?/g).join("").toUpperCase()
Run Code Online (Sandbox Code Playgroud)
如果只有第一个,则获取第一个和最后一个,除了获取第一个 2。(OP的问题)
John => JO 和 "John Doe Smith" => "JS"
name.match(/(^\S\S?|\b\S)?/g).join("").match(/(^\S|\S$)?/g).join("").toUpperCase()
Run Code Online (Sandbox Code Playgroud)
注意:如果名称包含,或其他非单词字符,您可以使用/w代替/S或事先清理它
还有一些其他答案可以解决您的查询,但稍微复杂一些。这是一个更具可读性的解决方案,它涵盖了大多数边缘情况。
由于您的全名可以包含任意数量的单词(中间名),因此我们最好的办法是将其放入一个数组中,并从该数组中的第一个和最后一个单词中获取初始字符,然后将字母一起返回。
此外,如果您的 'fullName' 仅包含一个单词,则单词 atarray[0]和array[array.length - 1]将是同一个单词,因此我们正在处理如果第一个if.
function nameToInitials(fullName) {
const namesArray = fullName.trim().split(' ');
if (namesArray.length === 1) return `${namesArray[0].charAt(0)}`;
else return `${namesArray[0].charAt(0)}${namesArray[namesArray.length - 1].charAt(0)}`;
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
> nameToInitials('Prince') // "P"
> nameToInitials('FirstName LastName') // "FL"
> nameToInitials('1stName 2ndName 3rdName 4thName 5thName')
// "15"
小智 7
您使用以下一行逻辑:
"FirstName MiddleName LastName".split(" ").map((n,i,a)=> i === 0 || i+1 === a.length ? n[0] : null).join("");
Run Code Online (Sandbox Code Playgroud)
小智 7
'Aniket Kumar Agrawal'.split(' ').map(x => x.charAt(0)).join('').substr(0, 2).toUpperCase()
Run Code Online (Sandbox Code Playgroud)
你可以为此做一个函数:
var name = 'Name';
function getInitials( name,delimeter ) {
if( name ) {
var array = name.split( delimeter );
switch ( array.length ) {
case 1:
return array[0].charAt(0).toUpperCase();
break;
default:
return array[0].charAt(0).toUpperCase() + array[ array.length -1 ].charAt(0).toUpperCase();
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
小提琴: http: //jsfiddle.net/5v3n2f95/1/
| 归档时间: |
|
| 查看次数: |
31278 次 |
| 最近记录: |