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

相关推荐
daols885 分钟前
vxe-table 渲染器教程一:实现金额输入控件
javascript·vue.js·vxe-table
不好听61318 分钟前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹19 分钟前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听61320 分钟前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
GuWenyue21 分钟前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue21 分钟前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
小林ixn1 小时前
从 onclick 到 React 合成事件,再到完整应用逻辑:一次前端架构的深度剖析
前端·react.js·前端框架
我叫洋洋2 小时前
C ++ [ hello world ]
c语言·c++·算法
Csvn2 小时前
🧩「找不到模块」排查全记录——Monorepo 下 TypeScript 路径别名的 5 种「不通」与根治方案
前端
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程