Convert a multi-line string into a javascript object

我的未来我决定 提交于 2021-01-29 01:42:06

问题


I've my raw data that looks like this:

Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
x1000

I'd like to convert into a loopable object with keys and values something like:

var d = {
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
};

How can convert this to a javascript object? I'm thinking stringify may be a good starting point. FirstName have different values. They are just for the purpose of demonstration


回答1:


  • split the string at \n
  • loop through each line using map
  • Use match with the regex /(.*), (.*) \(.*\)\s+(.*)/ to get first name, last name into capturing groups (demo)
  • create an object from the array using reduce

let str =
`LastName1, FirstName1 (Details-Details)      #ID1
LastName2, FirstName2 (Details-Details)      #ID2
LastName3, FirstName3 (Details-Details)      #ID3`

let output = str.split("\n")
                .map(a => a.match(/(.*), (.*) \(.*\)\s+(.*)/))
                .reduce((r, [, last, first, id]) => {
                    r[`${first} ${last}`] = id
                    return r;
                },{})

console.log(output)



回答2:


You can use regex to extract the data, use RegExp#exec method to extract data using a regular expression.

var str = `Last Name1, First Name1 (Details-Details)      j1
Last Name2, First Name2 (Details-Details)      32
Last Name3, First Name3 (Details-Details)      3
Last Nam4e, First Name4 (Details-Details)      4
Last Name5, First Name5 (Details-Details)      5
Last Name6, First Name6 (Details-Details)     6`


// pattern for matching the string
let reg = /([\w ]+)\b\s?,\s?([\w ]+)\b\s*\([^)]+\)\s*([\w\d]+)/g;

// variable for storing match
let m;

// object for the result
let res = {};

// iterate over the matches
while (m = reg.exec(str)) {
// define object property based on the match
  res[`${m[2]} ${m[1]}`] = m[3];
}

console.log(res);

Regex explanation here.



来源:https://stackoverflow.com/questions/55293472/convert-a-multi-line-string-into-a-javascript-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!