去重 · 扁平化 · 集合运算 · 分块 · 分组 · 排序 · 查找 · 最大和
场景:列表过滤重复数据。基本类型去重要秒答,对象去重要会用 Map。
场景:[1, [2, [3, [4]]]] → [1,2,3,4]。手写必考。
场景:权限合并、标签筛选、对比差异。
场景:分页、批量请求。把大数组切成 size 个一组。lodash 的 chunk 实现。
slice(i, i+size) 切片是关键。场景:按部门分组员工、按状态分组订单。等同于 lodash 的 groupBy。
(acc[key] ||= []).push(item) 是分组的标准技巧,key 不存在时自动建空数组。场景:列表按多个字段排序(先按状态再按时间),面试常考。
[10, 2, 1].sort() 得到 [1, 10, 2]!必须传比较函数。场景:nums = [2,7,11,15], target = 9,返回 [0,1]。哈希表经典题。
场景:[-2,1,-3,4,-1,2,1,-5,4] 最大连续子数组是 [4,-1,2,1],和为 6。动态规划入门题。
curSum = Math.max(nums[i], curSum + nums[i]) 是核心。面试要讲清楚"为什么前面的负和要丢弃"。场景:把两个数组合并成 [[a1,b1],[a2,b2]...],类似 Python 的 zip。表单批量生成、双列表对齐。
zip(headers, row).map(([k,v]) => ({[k]:v}))。场景:表单提交前对比新旧数据,找出哪些项被新增/删除/修改。Vue/React 项目高频。
JSON.stringify 比较简单但有键顺序问题({a:1,b:2} 和 {b:2,a:1} 字符串不同但内容相同)。严谨做法是逐字段比较或用 lodash.isEqual。