如何将一个字符串数组做成一个键值对对象,使值成为一个数组?
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);
我有一个字符串数组,如下所示:
[
"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);