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

时间:2015-07-27 04:09:16

标签: javascript arrays string object split

使用Javascript(最好是在for循环中)如何将全名数组转换为对象,以便我可以将这些对象拆分为键值对,并将键称为“first”& “最后”,这些值是分为这些类别的全名吗?

我开始使用单个字符串分隔到新行...到目前为止,我已使用.split(“\ n”)方法将此字符串拆分为数组。我现在在每个名字的前面都有多余的空白区域......不确定这是否真的重要......但我尝试过.splice(“”)试图摆脱多余的空白......但是它不起作用。如你所见,我需要一些帮助。谢谢!

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"]

4 个答案:

答案 0 :(得分:4)

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

nameArray.map(function (fullName) {
    var names = fullName.trim().split(' '); // takes care of excess whitespace
    return {
        first: names[0],
        last: names[1]
    };
});

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

答案 1 :(得分:1)

如果您知道前方总是有空位,那么总会有两个名字:

$ python
Python 2.7.10 (default, Jul  5 2015, 14:15:43) 
[GCC 5.1.1 20150618 (Red Hat 5.1.1-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> scipy.__version__
'0.14.1'
>>> import numpy
>>> numpy.__version__
'1.9.2'
>>> import sklearn
>>> sklearn.__version__
'0.16.1'
>>> import nltk
>>> nltk.__version__
'3.0.4'
>>> import argparse
>>> argparse.__version__
'1.1'

$ python train_classifier.py --instances files --fraction 0.75 --no-pickle --min_score 2 --ngrams 1 2 3 --show-most-informative 10 movie_reviews --classifier sklearn.MultinomialNB
loading movie_reviews
2 labels: [u'neg', u'pos']
calculating word scores
using bag of words from known set feature extraction
71903 words meet min_score and/or max_feats
1500 training feats, 500 testing feats
training sklearn.MultinomialNB with {'alpha': 1.0}
using dtype bool
training sklearn.MultinomialNB classifier
accuracy: 0.788000
neg precision: 0.918605
neg recall: 0.632000
neg f-measure: 0.748815
pos precision: 0.719512
pos recall: 0.944000
pos f-measure: 0.816609

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果您需要处理多个单词的姓氏(例如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 的好处是可以消除未通过验证的记录,例如如果有一个空字符串,则上面不会将其放入 names 数组中。