按条件删除嵌套对象数组中accmp为null的duties_details项(排除COMPRO1类)
问题原因分析
你的代码存在以下几个核心问题导致返回undefined:
- 外层
map没有显式返回值:符合class_id != "COMPRO1"条件的条目处理后没有返回,不符合条件的条目也没有原样返回,最终遍历结果全是undefined - 过滤逻辑写反:你需要删除
accmp为null的项,实际代码写的是筛选保留e.accmp == null的项,和需求完全相反 - 多余嵌套逻辑:不需要对
duties_details做map遍历,直接对整个数组做filter即可 - 结构适配错误:原始数据每个外层数组元素是仅包含单个职位对象的子数组,处理后需要保持原有结构返回
修正后代码
const filterDRData = DRData ? DRData.map(drGroup => { const position = drGroup[0]; // class_id为COMPRO1的条目直接原样返回 if (position.class_id === "COMPRO1") { return drGroup; } // 其他条目过滤duties_details,仅保留accmp不为null的项 const processedPosition = { ...position, duties_details: position.duties_details.filter(item => item.accmp !== null) }; // 保持原始结构,返回包裹对象的数组 return [processedPosition]; }) : null;
逻辑说明
- 输出数据和原始输入数据结构完全一致,不会破坏原有格式
- 仅
class_id不为COMPRO1的条目会过滤duties_details数组,过滤后自动剔除所有accmp为null的项 - 基于对象展开生成新对象,不会修改原始数据,避免原数据被意外污染
内容的提问来源于stack exchange,提问作者Jc John
相关产品推荐
相关产品推荐

