JavaScript中是否有可用于映射嵌套数组的库或简便方法?
注意:不要使用
Array作为变量名,会覆盖JS原生的Array构造器,容易引发未知错误,建议修改为carList这类语义化命名。
场景1:提取所有model为一维数组(最常用)
你原有的两层map写法会返回三层嵌套数组,不符合绝大多数使用场景。最优解是使用ES2019新增的flatMap方法,一次完成映射+单层扁平化,性能优于map后单独调用flat:
const allModels = carList.flatMap(car => car.cars.flatMap(brand => brand.models))
执行后直接得到一维数组:["Verna", "Aura", "Azera", "Accent", "Sonata", ...]
场景2:保留层级结构,按品牌分组存储model列表
如果不需要平铺数据,要保留品牌和对应model的关联关系,可采用map结合解构的写法,可读性更高:
const brandModels = carList.map(car => ({ category: car.name, brandList: car.cars.map(brand => ({ brandName: brand.name, models: brand.models })) }))
低版本环境兼容方案
如果运行环境不支持flatMap,可采用reduce实现同等效果,时间复杂度同为O(n)(n为所有model总数量),性能优秀:
const allModels = carList.reduce((res, car) => { car.cars.forEach(brand => res.push(...brand.models)) return res }, [])
内容的提问来源于stack exchange,提问作者Rabbi Musayev
相关产品推荐
相关产品推荐

