JS使用map对对象数组应用多条件提取数据未达预期如何解决
你写的代码存在三个问题:
- 没有过滤
product为NON_PROD的项,这部分数据会混入最终结果 - 非PROD0的分支没有添加return语句,内部map的执行结果没有被返回,对应位置会得到undefined
map方法是一对一映射,当你需要为单个原数组项返回多个结果值时,会产生嵌套数组,无法得到预期的一维数组结构
正确实现
使用flatMap替代map,flatMap会先执行映射再把返回的数组展平一层,刚好满足需求:
const subProdList = productInfo.flatMap(prod => { // 排除NON_PROD项,返回空数组展平后不会留存结果 if (prod.product === 'NON_PROD') return [] // PROD0直接返回包装成单元素数组的产品名 if (prod.product === 'PROD0') return [prod.product] // 其余产品返回所有subProd组成的数组 return prod.subProducts.map(subProduct => subProduct.subProd) })
执行后得到的subProdList就是你期望的["PROD0", "SUBPROD4", "SUBPROD5", "SUBPROD6"]。
内容的提问来源于stack exchange,提问作者user16902936
相关产品推荐
相关产品推荐

