簡體   English   中英

如何將字符串數組轉換為對象,以便可以將這些對象拆分為鍵值對?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM