如何在动态嵌套JSON数组中查询level3层级指定唯一ID是否存在
优化方案
你原来的三层forEach实现最大的问题是无法提前终止遍历,就算已经找到匹配的ID,也会把所有层级的节点全部遍历完,白白浪费性能。可以按你的使用场景选更高效的实现:
- 单次查询场景:用数组
some方法实现提前终止,只要找到第一个匹配的ID就会立刻停止遍历,代码也更简洁:
// 注意你贴的JSON结构中level1的子级字段是level2,原代码里的groups如果是笔误要对应调整 const hasMatch = resp.level1.some(level1Item => level1Item.level2.some(level2Item => level2Item.level3.some(level3Item => level3Item.id === IdToCompare) ) ) if (hasMatch) { alert('match found') }
- 多次查询场景:如果需要反复查询不同的ID是否存在,可以提前把所有level3的ID提取出来存入Set集合,后续每次查询的时间复杂度都是O(1),整体效率更高:
// 初始化时仅执行一次,生成ID缓存集合 const level3IdSet = new Set() resp.level1.forEach(level1Item => { level1Item.level2.forEach(level2Item => { level2Item.level3.forEach(level3Item => level3IdSet.add(level3Item.id)) }) }) // 后续任意次数查询直接调用即可 if (level3IdSet.has(IdToCompare)) { alert('match found') }
内容的提问来源于stack exchange,提问作者copenndthagen
相关产品推荐
相关产品推荐

