首页 > 解决方案 > 如何将字符串数组变成键值对对象,使值成为数组?

问题描述

我有一个这样的字符串数组:

[
    "hl7_file_type_1.msgtype",
    "hl7_file_type_1.filename",
    "hl7_file_type_2.msgtype",
    "hl7_file_type_2.filename",
    "hl7_file_type_3.msgtype",
    "hl7_file_type_3.filename"
]

我正在尝试将其转换为键值对对象,如下所示(expected result):

{
"hl7_file_type_1": ["msgtype","filename"],
"hl7_file_type_2": ["msgtype","filename"],
"hl7_file_type_3": ["msgtype","filename"],
}

这是我尝试这样做的方法:

let tmp = {};
for (let i = 0; i < this.regexArray.length; i++){
      let split = this.regexArray[i].split('.');
      tmp[split[0].trim()] = split[1].trim();
    }
    console.log('Key Value')
    console.log(tmp);

这是返回的内容:

{
    "hl7_file_type_1": "filename",
    "hl7_file_type_2": "filename",
    "hl7_file_type_3": "filename"
}

如何更改我的函数以返回expected result上述内容

标签: javascripttypescriptkey-value

解决方案


您可以使用reduce轻松实现此目的

const arr = [
  "hl7_file_type_1.msgtype",
  "hl7_file_type_1.filename",
  "hl7_file_type_2.msgtype",
  "hl7_file_type_2.filename",
  "hl7_file_type_3.msgtype",
  "hl7_file_type_3.filename",
];

const result = arr.reduce((acc, curr) => {
  const [prop, type] = curr.split(".");
  if (!acc[prop]) acc[prop] = [type];
  else acc[prop].push(type);

  return acc;
}, {});

console.log(result);


推荐阅读