如何在TypeScript中过滤嵌套数组并保留Summary记录?
解决方案:过滤JournalReport行数据
你遇到的问题主要是原代码没处理两种核心情况:一是部分行没有ColData而是带Summary的Section行,二是你需要精准检查ColData[1]的id而非任意ColData项的id。下面是修正后的代码,完全满足你的需求:
function getResult(filterById, objList) { return objList.Rows.Row.filter(function(row) { // 保留所有包含Summary的Section行 if (row.Summary) { return true; } // 检查Data行的ColData[1].id是否匹配目标值 // 用可选链操作符安全访问,避免结构异常报错 if (row.ColData?.[1]?.id === filterById) { return true; } // 其他不符合条件的行直接过滤 return false; }); }
代码逻辑说明:
- 优先保留Summary行:只要当前行存在
Summary属性,就直接判定为需要保留的行,完全覆盖你要保留所有Summary记录的需求 - 精准匹配Data行:通过可选链
?.安全访问ColData[1].id,既避免了某些行结构异常导致的报错,又精准匹配了你指定的索引位置的id值 - 过滤无关行:既不是Summary行、也不匹配目标id的行都会被过滤掉
使用示例:
假设你的原始JSON数据存储在reportData变量中,调用方式如下:
const filteredResult = getResult("567", reportData); console.log(filteredResult);
运行后会得到你需要的结果:包含那条ColData[1].id为"567"的Data行,以及所有带Summary的Section行。
内容的提问来源于stack exchange,提问作者TechChain
相关产品推荐
相关产品推荐

