javascript 拆分还是切片?
javascript split or slice?
我有一个功能可以抓取我页面上的当前用户。
变量 currentUser 等于用户的全名。有时这只是 FirstName LastName 但有时它是 FirstName MiddleName LastName。
我希望能够通过“”拆分(或切片)currentUser 并设置变量 FirstName 和 LastName。如果有 MiddleName,我希望它设置变量 MiddleName。
如有任何帮助,我们将不胜感激!
编辑:
目前我试过只返回名字的第一个字母和姓氏的最后一个字母。我还没有尝试设置中间名变量。见下文。谢谢!
function getCurrentUserEmail() {
var requestUri = "../_api/web/currentUser";
var requestHeaders = {"accept": "application/json;odata=verbose"};
$.ajax({
url: requestUri,
contentType: "application/json;odata=verbose",
headers: requestHeaders,
success: function onSuccess(data, request){
var FullName = data.d.Title;
var EmailAddress = data.d.Email;
CurrentUserEmail = EmailAddress;
CurrentUser = FullName;
name = CurrentUser.split(" ");
fName = name[0];
lName = name[1];
},
error: function (error) {}
});
}
我认为 split
可能是最好的方法:
var segments = currentUser.split(' ');
var firstName = segments[0];
var lastName = segments[segments.length - 1];
var middleName = segments.length === 3 ? segments[1] : undefined;
这里,firstName
和lastName
不管数组的长度,或者有多少段都有效,但是middleName
会在正好有3
段。
可能还有另一种方法 splice
;它可能看起来像这样:
var segments = currentUser.split(' ');
var firstName = segments.splice(0, 1)[0];
var middleName = segments.splice(0, 1)[0];
var lastName = segments.splice(0, 1)[0] || middleName;
if (middleName === lastName) {
middleName = undefined;
}
alert(firstName + middleName + lastName);
老实说,我不认为那是干净的。
是
function splitName(input) {
var arrayName = input.split(' ');
var name = arrayName[0];
var surname = arrayName[1];
if (arrayName.length === 3) {
var middleName = arrayName[1];
surname = arrayName[2];
}
console.log('Name ' + name);
if (middleName)
console.log('Middlename ' + middleName);
console.log('Surname ' + surname);
}
var a = "Name Middlename Surname";
var b = "Name Surname"
splitName(a);
console.log('#');
splitName(b);
使用var s = string.split()
函数。数组中的 s[0]
、s[1]
和 s[2]
值将关联到名称部分。
通过split
在空格上命名来创建一个数组。
pop
获取姓氏的数组。
shift
获取名字的数组。
shift
数组再次得到中间名。 OR (||
) 如果没有中间名,则结果为空字符串。
如果名字、中间名和姓氏各包含一个单词,此方法仅有效。
var name= 'Homer J Simpson';
var n = name.split(' ');
lastName= n.pop(); //Simpson
firstName= n.shift(); //Homer
middleName= n.shift() || ''; //J
console.log(firstName+' - '+middleName+' - '+lastName);
var name= 'Homer Simpson';
var n = name.split(' ');
lastName= n.pop(); //Simpson
firstName= n.shift(); //Homer
middleName= n.shift() || ''; //null string
console.log(firstName+' - '+middleName+' - '+lastName);
您可以使用 拆分和切片来完成此操作。这是一个使用切片的示例解决方案:
var firstName = name.slice(0, name.indexOf(" "));
var lastName = name.slice(name.lastIndexOf(" ")+1, name.length);
var middleName = name.slice(name.indexOf(" ")+1, name.lastIndexOf(" "));
注意:无法从字符串中准确判断什么是中间名。我们假设给定一个包含两个或三个单词的字符串,中间的单词是中间名。向 先生致歉。 Andrew van den Houten 和 先生。 José Maria De Las Mercedes Acosta.
演示: JSBin
所以我在这里做了一个普通的Javascript解决方案,能够解决很多问题...
我正在使用拆分功能
为了清除前缀,我正在使用 John Resigs 数组删除函数。
正如对已接受答案的评论中所建议的那样,您可以从您的服务器获取中间数组和不相关的(前缀)数组,也许...
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
//You can Add all Irrelevant Words in here
var irrelevant = ["Dr", "baron"];
//here is the case of the NonMiddleNameButStillInTheMiddleStuff
var nonMiddleStuff = ["von"];
//Here is the Code
var full = document.getElementById("fullname").innerHTML;
var names = full.split(" ");
getNameStuffDone(names);
var full = document.getElementById("fullname2").innerHTML;
var names = full.split(" ");
getNameStuffDone(names);
//Function getNameStuffDone
function getNameStuffDone(names) {
var firstName, lastName, middleName;
if (names.length > 2) {
for (var i = 0; i < irrelevant.length; i++) {
for (var j = 0; j < names.length; j++) {
if (names[j].toUpperCase() == irrelevant[i].toUpperCase()) {
names.remove(j, j);
}
}
}
if (names.length > 2) {
firstName = names[0];
if (nonMiddleStuff.indexOf(names[1]) >= 0) {
lastName = names[1] + " " + names[2];
names.remove(1, 1);
} else {
middleName = names[1];
lastName = names[2];
}
} else {
firstName = names[0];
lastName = names[1];
}
} else {
firstName = names[0];
lastName = names[1];
}
if (names.length > 2) {
alert("With Middle Name: " + firstName + " " + middleName + " " + lastName);
} else {
alert("Without Middle Name: " + firstName + " " + lastName);
}
}
<span id="fullname">Anders von Schnurzenstein</span><br>
<span id="fullname2">Baron Dr Anders Patrick Schnurzenstein</span>
我有一个功能可以抓取我页面上的当前用户。 变量 currentUser 等于用户的全名。有时这只是 FirstName LastName 但有时它是 FirstName MiddleName LastName。
我希望能够通过“”拆分(或切片)currentUser 并设置变量 FirstName 和 LastName。如果有 MiddleName,我希望它设置变量 MiddleName。
如有任何帮助,我们将不胜感激!
编辑:
目前我试过只返回名字的第一个字母和姓氏的最后一个字母。我还没有尝试设置中间名变量。见下文。谢谢!
function getCurrentUserEmail() {
var requestUri = "../_api/web/currentUser";
var requestHeaders = {"accept": "application/json;odata=verbose"};
$.ajax({
url: requestUri,
contentType: "application/json;odata=verbose",
headers: requestHeaders,
success: function onSuccess(data, request){
var FullName = data.d.Title;
var EmailAddress = data.d.Email;
CurrentUserEmail = EmailAddress;
CurrentUser = FullName;
name = CurrentUser.split(" ");
fName = name[0];
lName = name[1];
},
error: function (error) {}
});
}
我认为 split
可能是最好的方法:
var segments = currentUser.split(' ');
var firstName = segments[0];
var lastName = segments[segments.length - 1];
var middleName = segments.length === 3 ? segments[1] : undefined;
这里,firstName
和lastName
不管数组的长度,或者有多少段都有效,但是middleName
会在正好有3
段。
可能还有另一种方法 splice
;它可能看起来像这样:
var segments = currentUser.split(' ');
var firstName = segments.splice(0, 1)[0];
var middleName = segments.splice(0, 1)[0];
var lastName = segments.splice(0, 1)[0] || middleName;
if (middleName === lastName) {
middleName = undefined;
}
alert(firstName + middleName + lastName);
老实说,我不认为那是干净的。
是
function splitName(input) {
var arrayName = input.split(' ');
var name = arrayName[0];
var surname = arrayName[1];
if (arrayName.length === 3) {
var middleName = arrayName[1];
surname = arrayName[2];
}
console.log('Name ' + name);
if (middleName)
console.log('Middlename ' + middleName);
console.log('Surname ' + surname);
}
var a = "Name Middlename Surname";
var b = "Name Surname"
splitName(a);
console.log('#');
splitName(b);
使用var s = string.split()
函数。数组中的 s[0]
、s[1]
和 s[2]
值将关联到名称部分。
通过split
在空格上命名来创建一个数组。
pop
获取姓氏的数组。shift
获取名字的数组。shift
数组再次得到中间名。 OR (||
) 如果没有中间名,则结果为空字符串。
如果名字、中间名和姓氏各包含一个单词,此方法仅有效。
var name= 'Homer J Simpson';
var n = name.split(' ');
lastName= n.pop(); //Simpson
firstName= n.shift(); //Homer
middleName= n.shift() || ''; //J
console.log(firstName+' - '+middleName+' - '+lastName);
var name= 'Homer Simpson';
var n = name.split(' ');
lastName= n.pop(); //Simpson
firstName= n.shift(); //Homer
middleName= n.shift() || ''; //null string
console.log(firstName+' - '+middleName+' - '+lastName);
您可以使用 拆分和切片来完成此操作。这是一个使用切片的示例解决方案:
var firstName = name.slice(0, name.indexOf(" "));
var lastName = name.slice(name.lastIndexOf(" ")+1, name.length);
var middleName = name.slice(name.indexOf(" ")+1, name.lastIndexOf(" "));
注意:无法从字符串中准确判断什么是中间名。我们假设给定一个包含两个或三个单词的字符串,中间的单词是中间名。向 先生致歉。 Andrew van den Houten 和 先生。 José Maria De Las Mercedes Acosta.
演示: JSBin
所以我在这里做了一个普通的Javascript解决方案,能够解决很多问题...
我正在使用拆分功能 为了清除前缀,我正在使用 John Resigs 数组删除函数。
正如对已接受答案的评论中所建议的那样,您可以从您的服务器获取中间数组和不相关的(前缀)数组,也许...
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
//You can Add all Irrelevant Words in here
var irrelevant = ["Dr", "baron"];
//here is the case of the NonMiddleNameButStillInTheMiddleStuff
var nonMiddleStuff = ["von"];
//Here is the Code
var full = document.getElementById("fullname").innerHTML;
var names = full.split(" ");
getNameStuffDone(names);
var full = document.getElementById("fullname2").innerHTML;
var names = full.split(" ");
getNameStuffDone(names);
//Function getNameStuffDone
function getNameStuffDone(names) {
var firstName, lastName, middleName;
if (names.length > 2) {
for (var i = 0; i < irrelevant.length; i++) {
for (var j = 0; j < names.length; j++) {
if (names[j].toUpperCase() == irrelevant[i].toUpperCase()) {
names.remove(j, j);
}
}
}
if (names.length > 2) {
firstName = names[0];
if (nonMiddleStuff.indexOf(names[1]) >= 0) {
lastName = names[1] + " " + names[2];
names.remove(1, 1);
} else {
middleName = names[1];
lastName = names[2];
}
} else {
firstName = names[0];
lastName = names[1];
}
} else {
firstName = names[0];
lastName = names[1];
}
if (names.length > 2) {
alert("With Middle Name: " + firstName + " " + middleName + " " + lastName);
} else {
alert("Without Middle Name: " + firstName + " " + lastName);
}
}
<span id="fullname">Anders von Schnurzenstein</span><br>
<span id="fullname2">Baron Dr Anders Patrick Schnurzenstein</span>