Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript拆分还是切片?_Javascript_Split_Slice - Fatal编程技术网

javascript拆分还是切片?

javascript拆分还是切片?,javascript,split,slice,Javascript,Split,Slice,我有一个函数可以抓取我页面上的当前用户。 变量currentUser等于用户的全名。有时这只是名LastName,但有时是名MiddleName LastName 我希望能够按“”拆分(或切片)currentUser,并设置变量FirstName和LastName。如果有MiddleName,我希望它设置变量MiddleName 任何帮助都将不胜感激 编辑: 到目前为止,我所做的尝试只返回了名字的第一个字母和姓氏的最后一个字母。我还没有尝试设置中间名变量。见下文。谢谢大家! function g

我有一个函数可以抓取我页面上的当前用户。 变量currentUser等于用户的全名。有时这只是名LastName,但有时是名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
可以工作,而不管数组的长度,或者存在多少段,但是当正好有
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”