如何基于options数组将对象数组拆分为多个独立对象
实现options数组拆分生成独立对象的方案
你现有代码的逻辑是对同名配置的options做聚合,和你需要的拆分逻辑完全相反,所以无法得到预期输出。
推荐用更简洁的flatMap实现,代码如下:
var arr = [{name: "audio", options:[{name:'true', value: 'T'},{name:'false', value: 'F'},{name:'yes', value: 'Y'}]}, {name: "video", options:[{name:'true', value: 'T'},{name:'false', value: 'F'},{name:'yes', value: 'Y'}]}, {name: "call", options:[{name:'true', value: 'T'},{name:'false', value: 'F'},{name:'yes', value: 'Y'}]}] const res = arr.flatMap(({name, options}) => { return options.map(option => ({name, options: option})) }) console.log(res)
如果需要兼容低版本不支持flatMap的环境,可以用reduce实现:
const res = arr.reduce((acc, {name, options}) => { options.forEach(option => acc.push({name, options: option})) return acc }, [])
实现逻辑:
- 外层遍历原数组的每一项,获取配置名称
name和对应的选项列表options - 内层遍历每个选项,每遍历到一个选项就生成一个新对象,新对象的
name和原配置项一致,options直接取当前遍历到的单个选项 - 所有新对象汇总后就是你需要的拆分结果
注:你给出的期望输出里call的第三个选项为
{name:'No', value: 'N'},和你提供的输入不一致属于笔误,按输入跑上述代码会得到对应yes的选项,如有需求直接修改原数组对应配置即可。
内容的提问来源于stack exchange,提问作者Vishnu Shenoy
相关产品推荐
相关产品推荐

