[英]How to covert an array of strings into objects so that I can split those objects into key value pairs?
使用Javascript(最好在for循環中)如何將全名數組轉換為對象,以便可以將這些對象拆分為鍵值對,且鍵名分別為“ first”和“ last”,且值是完整的名稱分為那些類別?
我從一個名稱字符串開始,這些名稱被分隔到新行中……到目前為止,我已經使用.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"]
使用地圖功能(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'屬性。
如果您知道自己將始終在前面有空格,那么將始終有兩個名稱:
var peopleArray = nameArray.map(function(n) {
o = n.split(/\s+/); return { first: o[1], last: o[2] };
});
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);
如果您需要處理多個單詞的姓氏(例如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數組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.