javascript - 如何将字符串数组变成键值对对象,使值成为数组?
问题描述
我有一个这样的字符串数组:
[
"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
上述内容
解决方案
您可以使用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);