使用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"]
答案 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 数组中。