JavaScript如何将嵌套数组转换为按指定键映射的对象数组
问题根因
当前代码生成多层嵌套结构的核心原因:内层遍历dataholder时,每匹配一个字段就返回一个仅包含单键值的独立对象,外层map拿到的就是这些独立对象组成的小数组,最终自然形成二维数组结构,和预期的扁平对象数组不匹配。
修复实现
核心调整逻辑:遍历提取字段时,不要返回多个分散的单键对象,要把所有dataholder定义的字段值合并到同一个目标对象中返回。
基于reduce实现(兼容性更好)
逻辑清晰,适合全场景使用:
const result = record?.map(item => { return dataholder?.reduce((targetObj, field) => { targetObj[field] = item?.[field]?.value return targetObj }, {}) })
基于Object.fromEntries实现(写法更简洁)
无需兼容老旧浏览器时可使用,代码量更少:
const result = record?.map(item => { return Object.fromEntries( dataholder?.map(field => [field, item?.[field]?.value]) ) })
补充注意
你贴出的源数据record存在语法问题:第二个元素使用方括号包裹带具名键的结构,不属于合法JavaScript语法,实际业务中这个位置应该和第一个元素结构一致,为普通对象,否则会出现字段取值为undefined的异常。
内容的提问来源于stack exchange,提问作者sinnede
相关产品推荐
相关产品推荐

