算法 | 整理数据结构 | 算法题中,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")

相关推荐
donecoding32 分钟前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
智者知已应修善业35 分钟前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
风骏时光牛马36 分钟前
Raku正则匹配与数据批量处理实操案例
前端
Halo_tjn37 分钟前
Java Set集合相关知识点
java·开发语言·算法
nbwenren40 分钟前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川42 分钟前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端
Linsk43 分钟前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
当时只道寻常1 小时前
浏览器文本复制到剪贴板:企业级最佳实践
javascript
jinanwuhuaguo1 小时前
(第二十九篇)OpenClaw 实时与具身的跃迁——从异步孤岛到数字世界的“原住民”
前端·网络·人工智能·重构·openclaw