核心是将查找从遍历改为索引:优先用Set/Map替代数组方法实现O(1)查询;Map比Object更安全高效;有序数据用预排序+二分查找降为O(log n);嵌套结构建Map索引或缓存路径提升性能。

核心是把“找东西”这件事从“挨个翻”变成“直接拿”。JavaScript 里查找慢,往往不是代码写得不好,而是用错了容器——就像在书架上找书,却不用编号而靠肉眼扫。
优先用 Set 或 Map 做存在性检查
如果你只关心“有没有”,别用 数组的 some()、includes() 或 indexOf(),它们每次都要遍历。换成 Set,构建一次,后续查都是 O(1):
- 用户权限校验:把管理员 ID 存进
new Set(adminIds),用set.has(id)判断,10 万条数据下查找耗时从毫秒级降到微秒级 - 去重逻辑:
[...new Set(arr)]比filter((v, i) => arr.indexOf(v) === i)简洁且快得多 - 注意:Set 只存值;若需关联额外信息(如用户完整对象),改用
Map,以 ID 为 key,对象为 value
查键名或 ID 时,Map 比 Object 更稳更快
Object 虽然也能当哈希表用,但有隐式类型转换和原型链干扰风险;Map 明确支持任意类型作 key,且插入/查找/删除都稳定 O(1):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 缓存异步请求结果:
const cache = new Map(); cache.set(url, response),避免重复请求 - 树节点索引:子节点用
Map存储(this.children = new Map()),比数组 + find 更快定位特定 child - 不推荐用 Object 模拟 Map:比如
obj['1']和obj[1]实际是同一个 key,Map 则严格区分
有序数据就别硬扫,二分搜索+预排序更省力
如果列表本身可排序(如商品价格、时间戳、字母序姓名),提前排好,再用二分查找,能把 O(n) 降成 O(log n):
立即学习“Java免费学习笔记(深入)”;
- 1000 条数据最坏只需约 10 次比较,10 万条也只要约 17 次
- 可用
Array.prototype.sort()初始化时排一次,配合自定义二分函数(或用 Lodash 的sortedIndex) - 适合静态或低频更新的数据,比如配置项、字典、历史订单归档列表
嵌套查找别层层 filter,建索引一次到位
深层结构(如树、多级菜单、带分类的列表)反复用 find 或 flatMap().find() 查找,性能会随层级指数下降:
- 方案一:扁平化 + Map 索引。把所有节点展开为一维数组,同时构建
id → node的 Map,查哪个节点都 O(1) - 方案二:缓存路径映射。对常用查询路径(如
"category:tech/sub:js")生成唯一 key 并缓存结果 - 方案三:用 WeakMap 缓存计算结果,避免内存泄漏,适合临时高频访问场景

















