算法 | 整理数据结构 | 算法题中,JS 容器的选择

总结:算法题 JS 容器选择速查表

需求 用什么
是否出现过 Set
不同元素个数 Set.size
频率统计 Map
顺序访问 Array / String
随机访问 Array / String
去重 Set
哈希查找 Set / Map

JS 容器范式手册:Set、Map、字符串、数组

注意,区分 "值容器 "和"结构容器"


一、String(字符串)范式

字符串是只读的、类数组结构

javascript 复制代码
let s = "abcde";

s.length        // 5
s[0]            // "a"
s.charAt(0)     // "a"

// 算法遍历范式:
for (let i = 0; i < s.length; i++) {
    let ch = s[i];
}

二、Array(数组)范式

数组是有序容器 + 有 length

javascript 复制代码
let arr = [10, 20, 30];

arr.length   // 3
arr[1]       // 20

// 遍历范式:
for (let i = 0; i < arr.length; i++) {}
for (const x of arr) {}

// 判重(慢):
arr.includes(x)   // O(n)

三、Set(去重集合)范式

Set = 无序、唯一元素集合

javascript 复制代码
let set = new Set();

set.add("a")
set.add("b")
set.add("a") // 不会重复

set.size // 2

算法题标准用法

1️⃣ 统计不同元素
javascript 复制代码
let set = new Set();
for (let x of arr) {
    set.add(x);
}
let distinct = set.size;
2️⃣ 判断是否存在

set.has(x)

3️⃣ 清空集合

set.clear()


四、Map(计数器 / 哈希表)范式

Map = key → value(非常适合频率统计)

let map = new Map();

1️⃣ 计数范式(高频)

javascript 复制代码
for (let ch of s) {
    map.set(ch, (map.get(ch) || 0) + 1);
}

2️⃣ 取值

map.get("a") // undefined 或 数字

3️⃣ 判断是否存在

map.has("a")

相关推荐
anOnion8 小时前
构建无障碍组件之Menu Button pattern
前端·html·交互设计
用户47949283569158 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
JieE2129 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
冬奇Lab11 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
zhangxingchao11 小时前
Kotlin常用的Flow 操作符整理
前端
IT_陈寒13 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
Pedantic14 小时前
SwiftUI 手势笔记
前端·后端
橙子家14 小时前
浏览器缓存之【结构化数据库与缓存】: IndexedDB、Cache storage 和 Storage buckets
前端
user205855615181314 小时前
X6 中边悬浮置顶,规避 `mouseleave` 事件丢失问题
前端
李明卫杭州14 小时前
CSS aspect-ratio 属性完全指南
前端