如何将一个字符串数组做成一个键值对对象,使值成为一个数组?

how to make an array of strings into a key value pair object, making the value an array?

我有一个字符串数组,如下所示:

[
    "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);

这里是 returning:

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

如何将我的功能更改为 return expected result 如上所述

只需map然后reduce

const data = [
  "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 res = data
  .map((d) => d.split("."))
  .reduce((r, [k, v]) => ((r[k] ??= []), r[k].push(v), r), {});

console.log(res);

您可以使用 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);

一点点映射和减少就可以了

const input = [
    "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 = input.map(i => i.split(".")).reduce( (acc,[key,value]) => {
  return {
    ...acc,
    [key]: [...(acc[key] || []), value]
  }
},{});

console.log(result);