繁体   English   中英

将字符串键对数组转换为 object

[英]Convert an array of string key pairs to an object

我有这个数据结构:

[
  'ecl:hzl byr:1926 iyr:2010,pid:221225902 cid:61 hgt:186cm eyr:2021 hcl:#7d3b0c',
  'hcl:#efcc98 hgt:178 pid:433543520,eyr:2020 byr:1926,ecl:blu cid:92,iyr:2010',
  'iyr:2018,eyr:2026,byr:1946 ecl:brn,hcl:#b6652a hgt:158cm,pid:822320101'
]

我正在寻找将这些数组值转换为对象而不是字符串。 我知道我需要用split(' ')做一个map ,但不确定里面的逻辑。

所需的 output:

[
  {ecl: 'hzl', byr: 1926},
  {hcl: '#efcc98', byr: 1926}
]

等所有领域。

我试过了:

.map(values => { let pair = values.split(':'); obj[pair[0]] = pair[1]; return obj })

但似乎从数组的第一个索引开始一遍又一遍地重复相同的 object。

如果您希望将数组的每个元素作为单独的 object 获取,请尝试以下操作:

 const input = [ 'ecl:hzl byr:1926 iyr:2010,pid:221225902 cid:61 hgt:186cm eyr:2021 hcl:#7d3b0c', 'hcl:#efcc98 hgt:178 pid:433543520,eyr:2020 byr:1926,ecl:blu cid:92,iyr:2010', 'iyr:2018,eyr:2026,byr:1946 ecl:brn,hcl:#b6652a hgt:158cm,pid:822320101' ] const output = input.map((string) => { // for each string in array const pairs = string.split(/[\,]/); // split by space or comma const object = {}; // create an object for (pair of pairs) { // for each pair in string const parts = pair.split(":"); // split by colon if (parts.length == 2) { // if you get 2 parts after splitting object[parts[0]] = parts[1]; // use the first part as a key and the second as a value } } return object; }); console.log(output);

您可以使用Object.fromEntries

 const arr = [ 'ecl:hzl byr:1926 iyr:2010,pid:221225902 cid:61 hgt:186cm eyr:2021 hcl:#7d3b0c', 'hcl:#efcc98 hgt:178 pid:433543520,eyr:2020 byr:1926,ecl:blu cid:92,iyr:2010', 'iyr:2018,eyr:2026,byr:1946 ecl:brn,hcl:#b6652a hgt:158cm,pid:822320101' ]; const res = arr.map(x => Object.fromEntries(x.replace(/,/g, ' ').split(' ').map(y => y.split(':')))); console.log(res);

尝试这个

array = array.map(val => {
          var obj = {}
          val.split(' ').forEach(keyValPair => {
            var keyVal = keyValPair.split(':')
            obj[keyVal[0]] = keyVal[1];
          })
          return obj;
        })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM