【问题标题】:How to covert an array of strings into objects so that I can split those objects into key value pairs?如何将字符串数组转换为对象,以便我可以将这些对象拆分为键值对?
【发布时间】:2015-07-27 04:09:16
【问题描述】:

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

【问题讨论】:

    标签: javascript arrays string object split


    【解决方案1】:

    使用地图函数(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”属性。

    【讨论】:

      【解决方案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);
      

      【讨论】:

      • 我猜你正在从“Genevieve Harber IV”中删除“IV”,它也不会与“Jean-Claude Van Damme”对应。
      【解决方案3】:

      如果你知道前面总会有空格,而且总会有两个名字:

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

      【讨论】:

        【解决方案4】:

        如果您需要处理多个单词的姓氏(例如 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 数组中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-10
          • 2015-08-03
          • 1970-01-01
          • 2020-02-18
          • 2020-09-27
          • 2022-10-07
          • 1970-01-01
          • 2021-03-20
          相关资源
          最近更新 更多