多层对象数组的Map与Filter处理:筛选非null的flaggedItem
解决思路及代码示例
首先你提供的JSON数据存在语法错误(对象最后一个属性后的多余逗号、数组未正确闭合),先修正为合法格式:
const myData = [ { "id": "id1", "items": [ { "id": "idOne", "flaggedItem": null }, { "id": "idTwo", "flaggedItem": 1 } ] }, { "id": "id2", "items": [ { "id": "idThree", "flaggedItem": 1 }, { "id": "idFour", "flaggedItem": 2 } ] } ];
场景1:保留原数据结构,仅过滤每个父对象中flaggedItem不为null的items
你的原代码核心问题是map没有返回处理后的结果,且filter条件仅判断filteredItems.flaggedItem会误过滤0这类假值,应该明确判断不为null:
const filteredData = myData.map(obj => ({ ...obj, items: obj.items.filter(item => item.flaggedItem !== null) })); // 打印筛选后的完整结构 console.log(filteredData);
这段代码会返回和原结构一致的数组,每个父对象的items数组仅保留flaggedItem不为null的条目。
场景2:提取所有flaggedItem不为null的items为扁平数组
如果不需要保留父对象结构,只想拿到所有符合条件的子项,用flatMap更高效:
const allFlaggedItems = myData.flatMap(obj => obj.items.filter(item => item.flaggedItem !== null) ); // 打印所有符合条件的子项 console.log(allFlaggedItems);
原代码问题总结
- 未返回
map处理后的结果,导致无法获取最终筛选数据 filter条件逻辑不严谨,会误过滤flaggedItem为0、空字符串等假值的条目,需明确判断!== null- 原始JSON存在语法错误,修正后才能正常解析
内容的提问来源于stack exchange,提问作者programmerGuy
相关产品推荐
相关产品推荐

