前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库数组与集合专题面试题
面试知识索引 · 分类、标签与搜索

数组与集合专题面试题,38 道完整答案

数组与集合专题面试题第 1 页,显示第 1–38 题,共找到 38 道完整解析,可继续按分类、标签与关键词缩小范围。

38筛选结果
52技术分类
178检索标签
1索引分页
按分类建立知识面,再用标签和搜索定位问题

每页只渲染 50 道题。分类与标签分页可抓取,自由搜索结果不会制造无限 SEO 页面。

快速定位

分类、标签与关键词搜索

清除全部筛选
题库检索
技术分类52 个
全部分类5000AI Agent511浏览器301JavaScript285React281AI 开发262CSS240Node.js217TypeScript206Vue180前端工程化138React Native135
查看全部 52 个分类
操作系统135数据库134Docker95计算机网络94API 设计90Kubernetes90HTML89Redis89全栈开发88分布式系统88系统设计86HTTP85Next.js60Angular58Linux53Nuxt51PostgreSQL46可观测性46设计模式46小程序45身份与权限45无障碍44MongoDB43PWA43Web 安全43Git42前端测试42前端性能41WebAssembly40测试40AI 工程37SvelteKit37Go35前端数据管理30React Router29AI 全栈28Svelte27算法12Java10数据结构5前端手写题3
热门标签178 个
全部标签数组与集合38并发编程448缓存355性能优化340安全336异步编程292类型系统215构建工具211容器化184流处理177表单157SQL148HTTP141路由140离线应用121
查看其余 163 个标签
网络协议111测试109数据库事务95实时通信92Web 可访问性90动画79可观测性77Agent 记忆75向量检索66工具调用66LangGraph59Prompt56任务规划53排障与运维53数据库索引52浏览器自动化51Flexbox50值与类型50GraphQL49事务与并发49构建与镜像49DNS 与 TLS48工程协作与交付48AI 评测47CSS Grid47Express 服务47MCP47副作用与同步47向量与嵌入47文件与多媒体47流与二进制47传输与协议46列表与性能46可维护代码46响应式原理46容器运行46指标日志追踪46数据建模与运维46文件与 I/O46表单与输入46MCP 协议45RAG45Vite 与模块构建45Webpack45内存与虚拟化45原生集成45多 Agent45工作负载与发布45应用与性能45数据处理45模块与工具链45组件与模板45缓存与数据结构45网络与运维45评估与调试45身份认证与授权45运行时与开发45Web 系统方案44一致性与容错44侦听与生命周期44分布式使用44原生组件与交互44可访问交互44消息与异步处理44渲染与调度44索引与执行计划44组件设计44缓存与代理44进程与并发44层叠与选择器43攻击面与防御43文档数据库43权限与安全43离线与渐进增强43语义与文档43请求与通信 API43Worker 与线程协作42事件系统42存储与离线数据42服务架构42服务端与流式渲染42服务端工程42泛型设计42版本控制42类型收窄42类型运算42组件与端到端42编码与执行42进程与线程42DOM 与文档操作41Flex 布局41HTTP 语义41NestJS 架构41REST 与接口契约41SQL 查询41加载与交互性能41动画与视觉41类型工程41记忆与状态41运行时与调度41Agent 架构40WebAssembly 集成40单元与集成测试40多 Agent 协作40工作流编排40模块与语言机制40浏览器与 UI 自动化40生产运行40函数与作用域39响应式设计39性能与并发39类型系统基础39Grid 布局38盒模型与排版38Hooks 与复用37应用开发37推理与成本37状态共享37知识库数据37模型与应用评测36对象与原型35状态与渲染35语言与并发35异步与 Promise34Effect32RAG 检索31React 性能31响应式与性能31微调与数据31TanStack Query30全栈边界30数据与缓存30大模型基础29路由与数据流29事件循环28流式交互28提示与上下文设计27数据与服务端27组件与依赖注入27组件与响应式27多模态应用24应用与渲染24Hydration22沙箱安全22状态管理18算法18CI/CD13语言与运行时10React Server Components6搜索与排序4实用函数实现3链表栈队列3图算法2字符串算法2树与遍历2索引与高级结构2Kubernetes1作用域与函数1动态规划1异步与浏览器1手写与交互性能1数组与双指针1相等比较1
当前页01 / 1

正在显示第 1–38 题

JavaScript38
第 1 页

本页面试问题

按稳定语义路径排序

  1. 0001
    JavaScript数组与集合

    arr.at(-1) 和 arr[-1] 有什么区别?越界和旧浏览器怎么办?

    arr.at(-1) 取最后一项,arr[-1] 找的却是名为 "-1" 的属性,通常是 undefined。这篇讲清 at 的索引换算规则、越界返回值、只读不能赋值,以及在不支持 ES2022 的环境里怎么兜底。

    核心关键词Array.at 负数索引优势
    #数组与集合
  2. 0002
    JavaScript数组与集合

    遍历数组为什么写 i < length?怎么避免多循环一次或少循环一次?

    数组下标从 0 到 length - 1,所以正向遍历写 i < length 正好 length 次。这篇用求和的例子对比 i <= length 和 i < length - 1 的错误结果,讲清什么时候 length - 1 反而是对的,以及边遍历边删除为什么会漏项。

    核心关键词for 循环数组边界 off-by-one
    #数组与集合
  3. 0003
    JavaScript数组与集合

    concat 和展开运算符合并数组有什么区别?嵌套数组和空位怎么处理?

    concat 和 [...a, ...b] 合并普通数组结果一样,都只拆一层、都是浅拷贝。差别在边界上:concat 只拆数组,展开能拆任何可迭代对象;concat 保留空位,展开把空位变成 undefined。附 Symbol.isConcatSpreadable 和大数组 push 展开的坑。

    核心关键词concat 与展开运算符嵌套数组
    #数组与集合#容器化
  4. 0004
    JavaScript数组与集合

    copyWithin 是怎么在数组内部复制的?源和目标重叠时会覆盖错吗?

    copyWithin 把数组里的一段复制到同一个数组的另一个位置,直接改原数组、长度不变、超出末尾的部分被截掉。这篇讲清参数规则、源和目标重叠时为什么不会被覆盖错、自己写循环会错在哪,以及它真正适用的场景。

    核心关键词copyWithin 数组方法 高效场景
    #数组与集合#性能优化
  5. 0005
    JavaScript数组与集合

    数组的 keys、values、entries 返回什么?为什么第二次遍历就没数据了?

    数组的 keys、values、entries 返回的不是数组,而是迭代器,分别产出下标、值和 [下标, 值]。迭代器像一次性的游标,读完就停在末尾,所以第二次展开是空的。附它和 Object.keys 在稀疏数组上的差别、迭代时改数组的效果和常见用法。

    核心关键词数组 keys values entries 迭代器区别
    #数组与集合
  6. 0006
    JavaScript数组与集合

    为什么空数组调用 every 返回 true,some 却返回 false?

    every 问的是有没有反例,空数组没有反例所以是 true;some 问的是有没有一个满足的,空数组一个都没有所以是 false。这篇讲清背后的逻辑、两者的短路行为、空购物车也能提交这类业务 bug,以及回调写成 async 时的坑。

    核心关键词空数组 every some 返回值
    #数组与集合#异步编程
  7. 0007
    JavaScript数组与集合

    Array.fill 传负数的 start、end 怎么换算?为什么最后一项没被填上?

    fill(value, start, end) 填的是左闭右开区间,负数先加上 length 再换算,所以 fill(1, -3, -1) 不会碰到最后一项。附越界裁剪、终点小于起点时的结果,以及 fill([]) 让所有格子共用同一个数组的经典坑。

    核心关键词fill 方法负数 start end 参数
    #数组与集合
  8. 0008
    JavaScript数组与集合

    找数组元素的下标,什么时候用 findIndex,什么时候用 indexOf?

    indexOf 拿一个值用严格相等去比,适合找数字、字符串或者手上已有的那个对象引用;findIndex 接收一个判断函数,适合按属性、按条件找。附对象查找返回 -1 的原因、NaN 和空位上的差异,以及 fromIndex、findLastIndex 等相关用法。

    核心关键词findIndex 与 indexOf 查找场景区别
    #数组与集合
  9. 0009
    JavaScript数组与集合

    flat 默认展开几层?flatMap 和先 map 再 flat 有什么不同?

    flat 默认只展开一层,要全部拍平传 Infinity。flatMap 的结果等同于 map 之后 flat(1),但只遍历一次、不产生中间数组,而且深度固定为 1。附用 flatMap 同时过滤和一对多映射的写法、空位处理和第二个参数的误用。

    核心关键词Array.prototype.flat 默认深度 flatMap 区别
    #数组与集合
  10. 0010
    JavaScript数组与集合

    什么时候用 flatMap 比 map 加 filter 更合适?

    flatMap 的回调可以返回零项、一项或多项,所以它能在一次遍历里同时做过滤和映射,也能把一条记录展开成多行。这篇讲清它比 map 加 filter 合适的两类场景、返回 null 过滤不掉的坑,以及它是不是真的更快。

    核心关键词flatMap 与 map filter 组合场景
    #数组与集合#性能优化
  11. 0011
    JavaScript数组与集合

    Array.from 能转换类数组,为什么数组展开有时却会报错?

    Array.from 认两种输入:可迭代对象和类数组(有 length 和数字下标),数组展开只认可迭代对象,所以只有 length 的对象一展开就报 TypeError。附两者都满足时谁优先、缺失下标变成 undefined、第二个参数 mapFn 的用法。

    核心关键词Array.from 可迭代对象与类数组参数
    #数组与集合#异步编程
  12. 0012
    JavaScript数组与集合

    数组的 includes 和 indexOf 能找到 NaN 吗?两者还有哪些差别?

    [NaN].includes(NaN) 是 true,[NaN].indexOf(NaN) 是 -1,因为 includes 用 SameValueZero 比较,indexOf 用严格相等。这篇讲清三种相等算法的区别、两者在 +0 和 -0、稀疏数组上的表现,以及找 NaN 下标的正确写法。

    核心关键词includes 与 indexOf 检测 NaN 语义
    #数组与集合
  13. 0013
    JavaScript数组与集合

    map、filter、sort 链式调用会创建几个数组?怎么减少中间分配?

    map 和 filter 各返回一个新数组,sort 是原地排序、返回的还是同一个数组,所以三步链式调用只新建两个数组。这篇讲清怎么数分配、合并成一个循环后回调顺序会变、reduce 里展开累加器的平方级分配,以及什么时候才值得优化。

    核心关键词数组链式 map filter 中间内存分配
    #数组与集合
  14. 0014
    JavaScript数组与集合

    Array.isArray 和 instanceof Array 有什么区别?为什么跨 iframe 就失效了?

    instanceof 查的是原型链上有没有当前页面的 Array.prototype,Array.isArray 查的是对象本身是不是数组。iframe 里的数组原型是另一个 Array.prototype,所以 instanceof 返回 false。附伪造原型、改掉原型、TypedArray、Proxy 等情况下两者的结果。

    核心关键词Array.isArray 与 instanceof 跨 realm 区别
    #数组与集合
  15. 0015
    JavaScript数组与集合

    怎么手写 Symbol.iterator,让普通对象支持 for...of 和展开?

    给对象加一个 Symbol.iterator 方法,让它返回一个带 next 的对象,next 每次返回 { value, done },这个对象就能被 for...of 和展开语法使用。附为什么每次要返回新的迭代器、游标放在对象上导致只能遍历一次的坑,以及 return 方法在提前退出时的清理作用。

    核心关键词自定义迭代器 Symbol.iterator for...of
    #数组与集合
  16. 0016
    JavaScript数组与集合

    什么是类数组对象?arguments 和真数组有什么区别,怎么转换?

    类数组是有 length 和数字下标、但原型不是 Array.prototype 的对象,arguments 就是典型。它能按下标读、能 for...of,却没有 map、forEach。附三种转换写法、非严格模式下 arguments 和形参联动的坑、箭头函数没有 arguments,以及为什么新代码应该用剩余参数。

    核心关键词类数组对象 arguments 与数组转换
    #数组与集合
  17. 0017
    JavaScript数组与集合

    reduce 和 reduceRight 在顺序敏感的计算里有什么区别?

    reduce 从左往右遍历,reduceRight 从右往左,回调参数都是累加器在前、当前值在后。加法和乘法不受方向影响,字符串拼接、减法、函数组合就会得到不同结果。附用 reduceRight 实现 compose、它和 reverse 再 reduce 的区别,以及空数组时的报错。

    核心关键词reduce 与 reduceRight 遍历方向
    #数组与集合
  18. 0018
    JavaScript数组与集合

    forEach 或 map 遍历时修改原数组,哪些变化会被看到?

    在 forEach 回调里追加、删除、改值,哪些会被后续回调看到?讲清开始时固定长度、访问时再读值这两条规则,以及 splice 删除导致跳项的原因和安全的改法。

    核心关键词forEach map 修改原数组行为
    #数组与集合
  19. 0019
    JavaScript数组与集合

    数字数组直接 sort 为什么会把 10 排在 9 前面?

    sort 不传比较函数时会把元素转成字符串再比较,所以 10 排在 9 前面。讲清默认排序规则、比较器返回值的含义、返回布尔值为什么不对,以及对象数组、中文、NaN 的排序写法。

    核心关键词数组 sort 默认字符串 Unicode 排序
    #数组与集合
  20. 0020
    JavaScript数组与集合

    sort 会改原数组吗?不想改原数组该怎么排序?

    sort 会直接修改原数组,返回值和原数组是同一个引用。讲清怎样排序而不动原数组,slice、展开、toSorted 三种写法的区别,以及复制后对象元素仍然共享的问题。

    核心关键词sort 会修改原数组吗
    #数组与集合
  21. 0021
    JavaScript数组与集合

    splice 和 slice 有什么区别,哪个会改原数组?

    splice 会修改原数组,第二个参数是删除个数,返回被删掉的元素;slice 不改原数组,第二个参数是结束索引,返回截取的副本。附删除、插入、替换写法,负数索引规则和 toSpliced。

    核心关键词splice 与 slice 修改原数组区别
    #数组与集合
  22. 0022
    JavaScript数组与集合

    数组的 toString 和 join 有什么区别,嵌套数组真的被展平了吗?

    数组 toString 内部就是调用 join,默认用逗号连接。讲清 join 自定义分隔符、null 和 undefined 变空字符串、嵌套数组看起来被展平的原因,以及为什么 join 结果不能当序列化格式用。

    核心关键词数组 toString 与 join 区别
    #数组与集合
  23. 0023
    JavaScript数组与集合

    数组头部 shift、unshift 为什么常比尾部 push、pop 成本高?

    push 和 pop 只动数组末尾,shift 和 unshift 要把后面所有元素的索引挪一遍,所以大数组上头部操作更慢。讲清四个方法的返回值、复杂度,以及用 shift 做队列的问题和游标写法。

    核心关键词数组头部尾部操作性能差异
    #数组与集合#性能优化#算法
  24. 0024
    JavaScript数组与集合

    为什么空数组 reduce 不传初始值会抛错,应该返回什么才合理?

    reduce 不传初始值时拿第一个元素当累加器,空数组没有第一个元素,所以抛 TypeError。讲清 filter 之后突然报错的原因、求和与求最大值该怎么选初始值,以及单元素数组不执行回调的坑。

    核心关键词空数组 reduce 无初始值错误
    #数组与集合
  25. 0025
    JavaScript数组与集合

    for...of 和 forEach 怎么跳过当前项、提前结束,异步时有什么区别?

    forEach 里 return 为什么停不下来?对比 for...of 和 forEach 在跳过当前项、提前结束、处理 async 回调上的区别,以及查找用 some、find,顺序等待用 for...of,并发用 Promise.all 的选择方法。

    核心关键词for...of 与 forEach break continue 区别
    #数组与集合#异步编程#并发编程
  26. 0026
    JavaScript数组与集合

    用普通对象当字典时为什么会读到原型属性,Map 能避免吗?

    空对象读 obj.toString 也能拿到值,因为对象读属性会查原型链。讲清普通对象当字典的原型冲突问题,Map 的 get 和 has 为什么不受影响,以及 Object.hasOwn、Object.create(null) 和假值判断的坑。

    核心关键词Map 避免原型链属性冲突
    #数组与集合
  27. 0027
    JavaScript数组与集合

    Map 的遍历顺序是怎么定的,和对象的属性顺序有什么区别?

    Map 严格按键第一次插入的顺序遍历,更新已有键不改变位置,删除后再插入才会排到最后。对象则会把整数键按数值大小排在最前面。附对照代码、LRU 缓存的写法和对象属性排序规则。

    核心关键词Map 迭代顺序与对象属性顺序
    #数组与集合
  28. 0028
    JavaScript数组与集合

    JSON.stringify(Map) 为什么得到空对象,怎样可靠保存再恢复?

    JSON.stringify 只看对象的可枚举自有属性,Map 的数据不存在属性上,所以得到 {}。讲清转成条目数组再用 new Map 恢复的写法,Object.fromEntries 的键类型问题,以及对象键、BigInt 等特殊值的限制。

    核心关键词Map JSON.stringify 序列化
    #数组与集合
  29. 0029
    JavaScript数组与集合

    Map.set 和 Set.add 为什么能链式调用,delete、clear 可以吗?

    Map.set 和 Set.add 返回集合本身,所以能接着调用;delete 返回布尔值表示删没删成功,clear 返回 undefined,都不能再链下去。讲清各方法返回值、链式调用是原地修改,以及 React 里更新 Map 状态的写法。

    核心关键词Map Set 链式调用方法
    #数组与集合#构建工具
  30. 0030
    JavaScript数组与集合

    Map.size 和 Object.keys(obj).length 数的到底是什么?

    Map.size 数的是条目,Object.keys(obj).length 数的是自有、可枚举的字符串键,数组 length 只是最大索引加一。讲清三者的统计范围、Symbol 和不可枚举属性的差别,以及为什么普通对象没有 length。

    核心关键词Map size 与对象键数量获取
    #数组与集合
  31. 0031
    JavaScript数组与集合

    Map 和普通对象的键有什么本质区别,什么时候该用 Map?

    普通对象的键只能是字符串或 Symbol,数字和对象当键都会被转成字符串;Map 的键可以是任意值,对象按引用区分。附对照代码,讲清什么时候该用 Map、什么时候用对象更合适。

    核心关键词Map 与普通对象键类型对比
    #数组与集合
  32. 0032
    JavaScript数组与集合

    Set 遍历时新增、删除和重新加入成员,会不会重复处理?

    Set 按插入顺序遍历,遍历中新加的成员会被访问到,还没访问就被删除的会跳过,删除后重新加入的会再访问一次。讲清这三条规则、为什么可能死循环,以及先复制快照再遍历的写法。

    核心关键词Set 迭代中修改元素行为
    #数组与集合
  33. 0033
    JavaScript数组与集合

    Set 是怎么判断重复的,为什么 NaN 能去重而两个相同的对象不行?

    Set 用 SameValueZero 判断重复,NaN 等于 NaN,+0 等于 -0,不做类型转换,对象按引用比较。讲清它和 === 与 Object.is 的区别,数组去重的写法,以及对象数组按 id 去重该怎么做。

    核心关键词Set SameValueZero 唯一性 NaN +0 -0
    #数组与集合
  34. 0034
    JavaScript数组与集合

    频繁判断元素是否存在时,Set.has 一定比 includes 快吗?

    数组 includes 要从头逐个比较,Set.has 通常是哈希查找,查询次数多时 Set 更快。但建 Set 本身要遍历一遍,只查一次或每次都重建就不划算。讲清复杂度、什么时候值得建 Set,以及常见的写法错误。

    核心关键词Set 与数组元素存在性检查性能
    #数组与集合#性能优化#构建工具
  35. 0035
    JavaScript数组与集合

    稀疏数组的空位和 undefined 有什么区别,为什么 Array(n).map 不执行?

    new Array(3) 只设置了长度,里面一个元素都没有,这叫空位。讲清空位和 undefined 的区别、为什么 map 和 forEach 会跳过空位、怎样用 fill 和 Array.from 初始化数组,以及 fill 对象时共享引用的坑。

    核心关键词JavaScript 稀疏数组空位与 undefined 区别
    #数组与集合
  36. 0036
    JavaScript数组与集合

    数组展开为什么能复制数组和 Set,它背后到底读取了什么?

    数组展开 [...x] 靠的是迭代器协议,只要对象实现了 Symbol.iterator 就能展开,所以数组、Set、Map、字符串都行。讲清展开是浅拷贝、为什么类数组对象展开会报错,以及数组展开和对象展开的区别。

    核心关键词展开运算符 数组 迭代器机制
    #数组与集合
  37. 0037
    JavaScript数组与集合

    WeakMap 的键只能是对象吗,它怎样影响垃圾回收?

    WeakMap 的键传统上只能是对象,ES2023 起也可以是非注册的 Symbol。它对键是弱引用,键对象没有其他引用时条目会被回收。讲清为什么不能用字符串当键、为什么没有 size 和遍历,以及适合的缓存和私有数据场景。

    核心关键词WeakMap 键对象 垃圾回收影响
    #数组与集合#缓存
  38. 0038
    JavaScript数组与集合

    WeakSet 适合用来标记对象已处理吗,它和 Set 有什么不同?

    WeakSet 只能存对象和非注册 Symbol,对成员是弱引用,没有 size 也不能遍历。讲清它最适合的场景:给对象打「已处理」标记、遍历对象图时防止循环引用,以及标记失败后如何允许重试。

    核心关键词WeakSet 与 Set 引用遍历标记对象
    #数组与集合
上一页
1
下一页
前端进阶之旅本地 Markdown 维护 · 服务端分页 · 完整内容对用户与搜索引擎一致