Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中将数组转换为以前缀值作为键的对象的最佳方法_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

在javascript中将数组转换为以前缀值作为键的对象的最佳方法

在javascript中将数组转换为以前缀值作为键的对象的最佳方法,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有一个带有前缀值的数组 ["options_a", "options_b", "options_c", "capable_d", "capable_e_c" ] 我需要以对象格式输出,前缀作为键,分组分割字符串作为值 object output format needed { "options":["a","b","c&qu

我有一个带有前缀值的数组

["options_a",
"options_b",
"options_c",
"capable_d",
"capable_e_c"
]
我需要以对象格式输出,前缀作为键,分组分割字符串作为值

object output format needed
{
"options":["a","b","c"],
"capable":["d","e_c"]
}
它可以通过普通for循环来实现,但是有没有更好的方法可以通过使用es6功能的简化形式来实现它


谢谢。

减少前缀值的数组。按下划线(
\uuu
)拆分项目,并使用destructuring获取键和值数组(按下划线拆分后,值可能有多个项目)。如果累加器(
acc
)不包含密钥,请使用空数组创建一个。通过下划线连接后,将值推送到
acc[key]

const arr=[“选项a”、“选项b”、“选项c”、“能干的”、“能干的”]
const result=arr.reduce((附件,项目)=>{
常量[键,…值]=项拆分(“”)
如果(!acc[key])acc[key]=[]
acc[key].push(value.join(“'))
返回acc;
}, {})

console.log(result)
减少前缀值的数组。按下划线(
\uuu
)拆分项目,并使用destructuring获取键和值数组(按下划线拆分后,值可能有多个项目)。如果累加器(
acc
)不包含密钥,请使用空数组创建一个。通过下划线连接后,将值推送到
acc[key]

const arr=[“选项a”、“选项b”、“选项c”、“能干的”、“能干的”]
const result=arr.reduce((附件,项目)=>{
常量[键,…值]=项拆分(“”)
如果(!acc[key])acc[key]=[]
acc[key].push(value.join(“'))
返回acc;
}, {})

console.log(result)
这两个答案看起来都不错,但是如果数据变大,那么选择哪一个更好呢?对我来说,这似乎是第二个没有join的答案。这可能是第二个答案,因为在第一个答案中会对临时数组进行垃圾收集。你可以随时分析它,看看哪个更快。这两个答案看起来都不错,但如果数据变大,选择哪一个会更好,对我来说,这似乎是你没有加入的第二个答案。这可能是第二个,因为临时数组将在第一个答案中被垃圾收集。您可以随时分析它,并查看哪个更快。