使用哈希表(Map/Object)替代数组查找可将时间复杂度从O(n)降为O(1),适用于两数之和等场景;2. 利用Set高效去重和集合操作,避免indexOf或双重循环;3. 避免使用shift/unshift以减少索引重排开销,改用双指针或尾部操作模拟队列;4. 通过排序结合双指针降低多层循环复杂度,如三数之和从O(n³)优化至O(n²)。合理选择数据结构是提升算法性能的关键。

提升JavaScript算法性能的关键在于合理选择数据结构和优化执行逻辑。选对数据结构能显著降低时间复杂度,而细节处理则避免不必要的开销。以下是常见场景下的实用建议。
1. 用哈希表(对象或Map)替代数组查找
在判断元素是否存在或频繁查询时,数组的indexOf或includes方法是O(n)操作,而哈希表可做到平均O(1)。
- 将查找数据存入Object或Map,键为值本身
- 例如:两数之和问题中,边遍历边存差值,避免嵌套循环
- 注意:Map比普通对象更适合非字符串键和大量数据
2. 合理使用Set去重与集合操作
需要去重或判断唯一性时,手动遍历+数组push会很慢。Set天然保证唯一性,且插入和查询高效。
- 替代filter + indexOf去重,直接new Set(arr)
- 求交集、并集时,先转Set再遍历,避免双重循环
- 例如:两个数组的共同元素,可用Set快速过滤
3. 避免频繁修改数组头部或中间
使用shift()或unshift()会触发整个数组元素的索引重排,时间复杂度为O(n)。
- 若需队列行为,考虑用双指针模拟或使用push() + pop()配合索引管理
- 或改用链表结构思想,仅在尾部操作
- 大量插入删除场景下,可考虑实现简易链表类
4. 利用排序与双指针减少嵌套循环
某些查找组合问题(如三数之和),暴力解法为O(n³),通过排序+双指针可降至O(n²)。
- 先排序,固定一个数,另两个指针从两端向中间移动
- 利用有序性跳过无效组合,同时去重也更方便
- 注意:排序本身O(n log n),但整体仍优于多重循环
基本上就这些。关键是在写代码前想清楚数据访问模式,选适合的结构,别一股脑全用数组。小改动往往带来大提升。










