javascript拆分还是切片?

时间:2015-06-17 14:57:41

标签: javascript split 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) {}
});
}

6 个答案:

答案 0 :(得分:3)

我认为split可能是最好的方法:

var segments = currentUser.split(' ');
var firstName = segments[0];
var lastName = segments[segments.length - 1];
var middleName = segments.length === 3 ? segments[1] : undefined;

此处,firstNamelastName无论数组的长度如何,或者存在多少个细分,都会有效,但只有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);

我只是不认为这是诚实的。

答案 1 :(得分:1)

所以我在这里制作了一个Vanilla 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>

答案 2 :(得分:0)

var

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);

答案 3 :(得分:0)

使用var s = string.split()功能。数组中的s[0]s[1]s[2]值将与名称部分相关联。

答案 4 :(得分:0)

通过split在空格上创建一个数组。

     
  1. pop数组获取姓氏。  
  2. shift数组获取名字。  
  3. 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);

答案 5 :(得分:0)

您可以使用两者拆分和切片来执行此操作。以下是使用切片的示例解决方案:

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éMariaDe Las Mercedes Acosta。

演示: JSBin