如何通过嵌套column Id查询所属父级table,避免遍历整个数据结构
方案1:单次查询单行实现
用Array.from()将集合类型转为数组即可调用数组方法,搭配reduce实现短路匹配,无需遍历全量结构:
const table = schema.reduce((foundTable, db) => foundTable || Array.from(db.Tables).find(table => table.Columns.some(col => col.Id === 1234)), null)
说明:
Array.from()支持所有可迭代的集合类型(Set/Map/类数组对象等),如果你的Tables是Map类型要取存储的表实例,改成Array.from(db.Tables.values())即可- reduce逻辑只要找到第一个匹配的table就会直接返回结果,后续的database和table都会跳过,不会做无效遍历
- 你之前的写法问题有两个:一是没有处理Tables集合转数组,二是
find返回的是匹配到的database而不是子级table
方案2:多次查询最优解
如果需要频繁根据column id查询所属table,提前建一次索引即可实现O(1)查询,完全不需要遍历结构:
// 初始化时仅执行一次建索引 const colIdToTable = schema.flatMap(db => Array.from(db.Tables)).reduce((map, table) => (table.Columns.forEach(col => map.set(col.Id, table)), map), new Map()) // 后续查询直接拿 const table = colIdToTable.get(1234)
内容的提问来源于stack exchange,提问作者Micha Schopman
相关产品推荐
相关产品推荐

