如何将对象的键映射到对应数组值生成所需的对象数组?
实现方案
1. 最简写法(ES2019+ 支持)
使用Object.entries结合flatMap,无外部可变变量,逻辑连贯:
const src = { a: [1, 2, 3] } const result = Object.entries(src).flatMap(([key, valueArr]) => valueArr.map(item => ({ [key]: item })) )
这个写法天然支持源对象包含多个数组属性的场景,比如src = {a:[1,2], b:[3,4]},会自动输出[{a:1}, {a:2}, {b:3}, {b:4}]。
2. 兼容旧环境的reduce写法
如果运行环境不支持flatMap,可以用reduce实现同样的效果:
const result = Object.entries(src).reduce((res, [key, valueArr]) => res.concat(valueArr.map(item => ({ [key]: item }))), [] )
3. 单键场景极简写法
如果可以确定源对象永远只有1个属性,可以直接简化为:
const key = Object.keys(src)[0] const result = src[key].map(item => ({ [key]: item }))
以上方案都避免了原写法中外部可变数组、副作用操作的问题,符合函数式编程的简洁原则。
内容的提问来源于stack exchange,提问作者Alex. A
相关产品推荐
相关产品推荐

