Javascript 如何将字符串数组转换为对象,以便将这些对象拆分为键值对?

Javascript 如何将字符串数组转换为对象,以便将这些对象拆分为键值对?,javascript,arrays,string,object,split,Javascript,Arrays,String,Object,Split,使用Javascript(最好是在for循环中)如何将全名数组转换为对象,以便将这些对象拆分为键-值对,键被称为“first”和“last”,而值是被拆分为这些类别的全名 我从一个被分隔成新行的名称字符串开始…到目前为止,我已经使用.split(“\n”)方法将该字符串拆分为一个数组。我现在在每个名字的前面都有多余的空格…不确定这是否真的重要…但我已经尝试了。拼接(“”)以尝试去除多余的空格。。。但它不起作用。正如你所看到的,我需要一点帮助。谢谢大家! var nameString = docu

使用Javascript(最好是在for循环中)如何将全名数组转换为对象,以便将这些对象拆分为键-值对,键被称为“first”和“last”,而值是被拆分为这些类别的全名

我从一个被分隔成新行的名称字符串开始…到目前为止,我已经使用.split(“\n”)方法将该字符串拆分为一个数组。我现在在每个名字的前面都有多余的空格…不确定这是否真的重要…但我已经尝试了。拼接(“”)以尝试去除多余的空格。。。但它不起作用。正如你所看到的,我需要一点帮助。谢谢大家!

var nameString = document.getElementsByTagName("textarea")[0].value;
var nameArray = nameString.split("\n");
以下是拆分字符串的结果:

["          Genevieve Harber IV",
 "          Dewitt Weber",
 "          Krystina O'Kon",
 "          Jeremy Adams",
 "          Aileen Lakin",
 "          Jesus Quigley",
 "          Shea Rempel",
 "          Citlalli Bernier",
 "          Forest Dare",
 "          Reina Kilback",
 "          Nathanael Abshire",
 "          Augustus Hoppe",
 "          Myrtis Herzog",
 "          Jack Senger",
 "          Ronny Smitham",
 "          Jordi Bruen",
 "          Leta Pfannerstill",
 "          Kayla Kshlerin",
 "          Norbert Thompson",
 "          Nat Lebsack"]

如果你知道你的前面总是有空位,而且总是有两个名字:

var peopleArray = nameArray.map(function(n) {
  o = n.split(/\s+/); return { first: o[1], last: o[2] };
});

如果你知道你的前面总是有空位,而且总是有两个名字:

var peopleArray = nameArray.map(function(n) {
  o = n.split(/\s+/); return { first: o[1], last: o[2] };
});
使用map函数(Array.prototype.map)

这将为您提供一个对象数组,其中每个对象都有一个与名字/姓氏对应的“first”和“last”属性。

使用map函数(array.prototype.map)

var objectList = []; //holder for the array of names
var mylist = ["          Genevieve Harber IV",
 "          Dewitt Weber",
 "          Krystina O'Kon",
 "          Jeremy Adams",
 "          Aileen Lakin",
 "          Jesus Quigley",
 "          Shea Rempel",
 "          Citlalli Bernier",
 "          Forest Dare",
 "          Reina Kilback",
 "          Nathanael Abshire",
 "          Augustus Hoppe",
 "          Myrtis Herzog",
 "          Jack Senger",
 "          Ronny Smitham",
 "          Jordi Bruen",
 "          Leta Pfannerstill",
 "          Kayla Kshlerin",
 "          Norbert Thompson",
 "          Nat Lebsack"];

//loop over the list
for (var i=0; i < mylist.length; i++) {
   var trimmed=mylist[i].trim();  //trim excess spaces
   var names = trimmed.split(" "); //split on spaces in between
   objectList.push({"first": names[0], "last": names[1]}); //push object onto array
}

//print the 4th name for demonstration of how to access it
console.log(objectList[3].last + ", " + objectList[3].first);
这将为您提供一个对象数组,其中每个对象都有一个与名字/姓氏对应的“first”和“last”属性。

var objectList=[]//名称数组的持有者
var objectList = []; //holder for the array of names
var mylist = ["          Genevieve Harber IV",
 "          Dewitt Weber",
 "          Krystina O'Kon",
 "          Jeremy Adams",
 "          Aileen Lakin",
 "          Jesus Quigley",
 "          Shea Rempel",
 "          Citlalli Bernier",
 "          Forest Dare",
 "          Reina Kilback",
 "          Nathanael Abshire",
 "          Augustus Hoppe",
 "          Myrtis Herzog",
 "          Jack Senger",
 "          Ronny Smitham",
 "          Jordi Bruen",
 "          Leta Pfannerstill",
 "          Kayla Kshlerin",
 "          Norbert Thompson",
 "          Nat Lebsack"];

//loop over the list
for (var i=0; i < mylist.length; i++) {
   var trimmed=mylist[i].trim();  //trim excess spaces
   var names = trimmed.split(" "); //split on spaces in between
   objectList.push({"first": names[0], "last": names[1]}); //push object onto array
}

//print the 4th name for demonstration of how to access it
console.log(objectList[3].last + ", " + objectList[3].first);
var mylist=[“Genevieve Harber IV”, “德维特·韦伯”, “Krystina O'Kon”, “杰里米·亚当斯”, “爱玲·拉金”, “耶稣奎格利”, “Shea Rempel”, “西特拉利·贝尼尔”, “森林挑战”, “雷纳·基尔巴克”, “纳撒尼尔·阿布希尔”, “奥古斯都·霍普”, “桃金娘”, “杰克·森格”, “Ronny Smitham”, “Jordi Bruen”, “Leta Pfannerstill”, “凯拉·克什莱林”, “诺伯特·汤普森”, “Nat Lebsack”]; //循环浏览列表 对于(变量i=0;i
var objectList=[]//名称数组的持有者
var mylist=[“Genevieve Harber IV”,
“德维特·韦伯”,
“Krystina O'Kon”,
“杰里米·亚当斯”,
“爱玲·拉金”,
“耶稣奎格利”,
“Shea Rempel”,
“西特拉利·贝尼尔”,
“森林挑战”,
“雷纳·基尔巴克”,
“纳撒尼尔·阿布希尔”,
“奥古斯都·霍普”,
“桃金娘”,
“杰克·森格”,
“Ronny Smitham”,
“Jordi Bruen”,
“Leta Pfannerstill”,
“凯拉·克什莱林”,
“诺伯特·汤普森”,
“Nat Lebsack”];
//循环浏览列表
对于(变量i=0;i
如果您需要处理多个单词的姓氏(例如Van Damme),则以下内容将有所帮助。它将第一个单词作为名字,其余的作为姓氏。它还处理仅为一个单词的名称(例如“Sting”),将其设为名字,将其设为姓氏“”(空字符串)。如果需要,可以修改回调函数以反转该函数

它还可以删除额外的空白,而无需任何额外的处理

var data = 
["          Genevieve Harber IV",
 "          Dewitt Weber",
 "          Krystina O'Kon",
 "          Jean-Claude Van Damme",
 "          Giessel"];


var names = data.reduce(function(names, name) {
  name = name.match(/\S+/g);
  if (name) {
    names.push({first: name.shift(), last: name.join(' ')});
  }
  return names;
}, []);

console.log(JSON.stringify(names)); 
// [{"first":"Genevieve","last":"Harber IV"},
//  {"first":"Dewitt","last":"Weber"},
//  {"first":"Krystina","last":"O'Kon"},
//  {"first":"Jean-Claude","last":"Van Damme"},
//  {"first":"Giessel","last":""}]

但是,名称可能比这更复杂。使用reduce的好处在于,您可以消除未通过验证的记录,例如,如果存在空字符串,则上面的内容不会将其放入名称数组。

如果您需要处理多个单词的姓氏(例如Van Damme),则以下内容将有所帮助。它将第一个单词作为名字,其余的作为姓氏。它还处理仅为一个单词的名称(例如“Sting”),将其设为名字,将其设为姓氏“”(空字符串)。如果需要,可以修改回调函数以反转该函数

它还可以删除额外的空白,而无需任何额外的处理

var data = 
["          Genevieve Harber IV",
 "          Dewitt Weber",
 "          Krystina O'Kon",
 "          Jean-Claude Van Damme",
 "          Giessel"];


var names = data.reduce(function(names, name) {
  name = name.match(/\S+/g);
  if (name) {
    names.push({first: name.shift(), last: name.join(' ')});
  }
  return names;
}, []);

console.log(JSON.stringify(names)); 
// [{"first":"Genevieve","last":"Harber IV"},
//  {"first":"Dewitt","last":"Weber"},
//  {"first":"Krystina","last":"O'Kon"},
//  {"first":"Jean-Claude","last":"Van Damme"},
//  {"first":"Giessel","last":""}]

但是,名称可能比这更复杂。使用reduce的好处在于,您可以删除未通过验证的记录,例如,如果存在空字符串,则上面的内容不会将其放入名称数组。

我猜您是在从“Genevieve Harber IV”中删除“IV”,也不会处理“Jean-Claude Van Damme”。我猜您是在从“Genevieve Harber IV”中删除“IV”《热纳维夫·哈伯四世》,也不会与《让·克劳德·范达姆》相比。