javascript拆分还是切片?
我有一个函数可以抓取我页面上的当前用户。 变量currentUser等于用户的全名。有时这只是名LastName,但有时是名MiddleName LastName 我希望能够按“”拆分(或切片)currentUser,并设置变量FirstName和LastName。如果有MiddleName,我希望它设置变量MiddleName 任何帮助都将不胜感激 编辑: 到目前为止,我所做的尝试只返回了名字的第一个字母和姓氏的最后一个字母。我还没有尝试设置中间名变量。见下文。谢谢大家!javascript拆分还是切片?,javascript,split,slice,Javascript,Split,Slice,我有一个函数可以抓取我页面上的当前用户。 变量currentUser等于用户的全名。有时这只是名LastName,但有时是名MiddleName LastName 我希望能够按“”拆分(或切片)currentUser,并设置变量FirstName和LastName。如果有MiddleName,我希望它设置变量MiddleName 任何帮助都将不胜感激 编辑: 到目前为止,我所做的尝试只返回了名字的第一个字母和姓氏的最后一个字母。我还没有尝试设置中间名变量。见下文。谢谢大家! function g
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
可以工作,而不管数组的长度,或者存在多少段,但是当正好有3段时,middleName
将被设置
使用拼接
可能还有另一种方法;它可能看起来像这样:
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);
老实说,我只是觉得这没那么干净。var
函数拆分名称(输入){
var arrayName=input.split(“”);
var name=arrayName[0];
var姓氏=arrayName[1];
if(arrayName.length==3){
var middleName=arrayName[1];
姓氏=arrayName[2];
}
console.log('Name'+Name);
if(中间名)
console.log('Middlename'+Middlename);
console.log('姓氏'+姓氏);
}
var a=“Name Middlename姓氏”;
var b=“姓名”
姓名(a);
console.log(“#”);
姓名(b)代码>使用var s=string.split()
函数<数组中的code>s[0]
、s[1]
和s[2]
值将与名称部分中的值关联。通过将名称拆分为空格创建数组
pop
获取姓氏的数组。
shift
数组以获取名字。
shift
再次单击数组以获取中间名称。或者(|
),如果没有中间名,则结果为空字符串。
仅当名字、中间名和姓氏各包含一个单词时,此选项才有效
var name='Homer J Simpson';
var n=名称。拆分(“”);
lastName=n.pop()//辛普森
firstName=n.shift()//荷马
middleName=n.shift()//J
log(firstName+'-'+middleName+'-'+lastName);
变量名称='Homer Simpson';
var n=名称。拆分(“”);
lastName=n.pop()//辛普森
firstName=n.shift()//荷马
middleName=n.shift()//空字符串
log(firstName+'-'+middleName+'-'+lastName)代码>您可以使用分割和切片来执行此操作。下面是一个使用slice的示例解决方案:
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先生致歉
演示:所以我在这里提出了一个普通的Javascript解决方案,能够解决很多问题
我正在使用split函数
为了清除前缀,我使用了johnresigs数组移除函数
正如对已接受答案的评论中所建议的,您可以从您的服务器获取中间数组和不相关(前缀)数组,可能
//数组删除-由John Resig(麻省理工学院授权)
Array.prototype.remove=函数(从,到){
var rest=this.slice((to | | from)+1 | | this.length);
this.length=from<0?this.length+from:from;
返回此。推。应用(此,其余);
};
//你可以在这里添加所有不相关的单词
var无关=[“Dr”,“baron”];
//这是非中间名但仍在中间名的情况
var nonMiddleStuff=[“von”];
//这是密码
var full=document.getElementById(“fullname”).innerHTML;
var name=full.split(“”);
getNameStuffDone(名称);
var full=document.getElementById(“fullname2”).innerHTML;
var name=full.split(“”);
getNameStuffDone(名称);
//函数getNameStuffDone
函数getNameStuffDone(名称){
变量firstName、lastName、middleName;
如果(names.length>2){
for(var i=0;i2){
firstName=名称[0];
if(nonMiddleStuff.indexOf(names[1])>=0{
lastName=名称[1]+“”+名称[2];
名称。删除(1,1);
}否则{
middleName=名称[1];
lastName=名称[2];
}
}否则{
firstName=名称[0];
lastName=名称[1];
}
}否则{
firstName=名称[0];
lastName=名称[1];
}
如果(names.length>2){
警报(“中间名:“+firstName+”“+middleName+”“+lastName”);
}否则{
警报(“无中间名:“+firstName+”+lastName”);
}
}
Anders von Schnurzenstein
安德斯·帕特里克·施努尔岑斯坦男爵医生
你能给我们看一下你的一些作品吗?冯·斯库尼潘男爵-中间名是冯吗?或者姓von Stoughypants?做你描述的事情有什么问题吗?什么问题?@Adam无法理解名字的一部分是在姓氏、中间名还是名字本身。实现这一点的唯一方法是列出可能的组合,或者用户可以在其中输入姓名的不同字段。e、 意大利语中的g是名字+姓氏,Maria Carlotta Lanzi
是名字+中间名+姓氏。@rpadovani-这是我的观点。除非这是一个家庭作业问题(看起来可能是),否则我建议用户退后一步,看看他们试图解决的实际问题。您将如何处理“Baron vo”