当前位置: 首页 > article >正文

前端八股JS---数组方法

目录超简速查表一图记全部一、遍历 / 循环类1. forEach2. map3. filter4. reduce二、查找 / 判断类5. find6. findIndex7. includes8. some9. every三、增删改会改变原数组10. push11. pop12. unshift13. shift14. splice四、不改变原数组的常用15. slice16. concat17. join五、排序 / 反转改原数组18. sort19. reverse六、ES6 常用20. flat21. flatMap最容易混淆的两个点必看1️⃣ slice vs splice记一次就够2️⃣ map vs forEach一个高频易错提醒sort() 默认会按字符串排序超简速查表一图记全部想做什么用哪个方法是否返回新数组是否改变原数组遍历不返回值forEach❌ 无返回值❌ 通常不改加工每一项map✅❌筛选filter✅❌累加 / 汇总reduce✅看用法❌找第一个符合条件的元素find❌返回元素❌找第一个符合条件的下标findIndex❌返回下标❌判断有无某个值includes❌返回布尔❌是否至少一个满足some❌返回布尔❌是否全部满足every❌返回布尔❌末尾加push❌返回长度✅末尾删pop❌返回元素✅开头加unshift❌返回长度✅开头删shift❌返回元素✅任意位置删/插/替换splice✅返回删的✅截取一段slice✅❌拼接数组concat✅❌数组 → 字符串join✅返回字符串❌排序sort✅返回原数组✅反转reverse✅返回原数组✅拍平嵌套flat✅❌map 拍平一层flatMap✅❌方法分类总览分类方法特点遍历/转换map、forEach遍历数组查找find、findIndex、includes、indexOf查找元素/索引过滤filter筛选符合条件的项判断some、every返回布尔值归并reduce最强大、面试最爱扁平化flat拍平多维数组操作splice、concat、slice增删改查扩展扩展运算符(...)复制、合并一、遍历 / 循环类1. forEach遍历作用单纯循环没有返回值arr.forEach(item { console.log(item) }) // 场景只做遍历、执行操作如打印、DOM操作2. map映射作用遍历数组返回一个新数组长度不变const arr [1, 2, 3] const newArr arr.map(item item * 2) // [2, 4, 6] // 场景数据格式转换、列表渲染 const users [{ name: 张三 }, { name: 李四 }] const names users.map(user user.name) // [张三, 李四]3. filter过滤作用筛选符合条件的项返回新数组const arr [1, 2, 3, 4] const newArr arr.filter(item item 2) // [3, 4] // 场景搜索、筛选列表 const activeUsers users.filter(user user.isActive)4. reduce归并/累加器- 面试最爱作用求和、数组扁平化、去重、分组、统计次数// 语法 arr.reduce((累加器, 当前项, 索引, 原数组) { return 新累加器 }, 初始值)二、查找 / 判断类5. find查找作用找到第一个符合条件的元素返回该项找不到返回 undefinedconst arr [1, 2, 3] const res arr.find(item item 1) // 26. findIndex查找索引作用找到第一个符合条件的下标找不到返回 -1const arr [1, 2, 3] arr.findIndex(item item 2) // 1 arr.findIndex(item item 10) // -17. includes包含作用判断数组是否包含某值返回布尔const arr [1, 2, 3] arr.includes(2) // true arr.includes(10) // false8. some判断是否有满足作用只要有一个满足就返回 trueconst arr [1, 2, 3] arr.some(item item 2) // true arr.some(item item 10) // false9. every判断全部满足作用所有项都满足才返回 trueconst arr [1, 2, 3] arr.every(item item 0) // true arr.every(item item 2) // false三、增删改会改变原数组10. push末尾添加arr.push(4)11. pop删除最后一个arr.pop()12. unshift开头添加arr.unshift(0)13. shift删除第一个arr.shift()14. splice删除/插入/替换作用修改原数组const arr [1, 2, 3, 4] // 删除从下标1开始删除2个 arr.splice(1, 2) // [2, 3]原数组变成 [1, 4] // 插入从下标1开始删除0个插入新元素 arr.splice(1, 0, 5) // 原数组变成 [1, 5, 4] // 替换从下标1开始删除1个插入新元素 arr.splice(1, 1, 6) // 原数组变成 [1, 6, 4]15. 扩展运算符 ...作用复制、合并数组// 复制 const newArr [...oldArr] // 合并 const combined [...arr1, ...arr2] // 求最大值 const max Math.max(...[1, 2, 3]) // 3四、不改变原数组的常用15. slice截取一段[1,2,3,4].slice(1,3) // [2,3]16. concat拼接数组[1,2].concat([3,4]) // [1,2,3,4]17. join数组转字符串[1,2,3].join(-) // 1-2-3五、排序 / 反转改原数组18. sort排序[3,1,2].sort((a,b)a-b) // [1,2,3]19. reverse反转[1,2,3].reverse() // [3,2,1]六、ES6 常用20. flat扁平化作用拍平多维数组const arr [1, [2, [3]]] arr.flat(1) // [1, 2, [3]]只扁平一层 arr.flat(Infinity) // [1, 2, 3]完全扁平21. flatMapmap flat[1,2].flatMap(x[x,x1]) // [1,2,2,3]七、reduce 高频面试用法重点1. 数组求和最基础const arr [1, 2, 3, 4] const sum arr.reduce((acc, cur) acc cur, 0) console.log(sum) // 10 // 执行过程 // 第1次acc0, cur1 → 返回1 // 第2次acc1, cur2 → 返回3 // 第3次acc3, cur3 → 返回6 // 第4次acc6, cur4 → 返回102. 数组去重const arr [1, 2, 2, 3, 3, 3] const uniqueArr arr.reduce((acc, cur) { if (!acc.includes(cur)) { acc.push(cur) } return acc }, []) console.log(uniqueArr) // [1, 2, 3]3. 数组扁平化// 扁平一层 const arr [1, [2, 3], 4] const flatOne arr.reduce((acc, cur) acc.concat(cur), []) // [1, 2, 3, 4] // 完全扁平递归 function flatten(arr) { return arr.reduce((acc, cur) { return acc.concat(Array.isArray(cur) ? flatten(cur) : cur) }, []) } const deepArr [1, [2, [3, [4]], 5]] console.log(flatten(deepArr)) // [1, 2, 3, 4, 5]4. 数组分组高频面试压轴const list [ { name: 张三, type: a }, { name: 李四, type: b }, { name: 王五, type: a }, ] const group list.reduce((acc, cur) { const key cur.type if (!acc[key]) acc[key] [] acc[key].push(cur) return acc }, {}) /* 结果 { a: [{name:张三,type:a}, {name:王五,type:a}], b: [{name:李四,type:b}] } */5. 统计次数const fruits [苹果, 香蕉, 苹果, 橙子, 香蕉, 苹果] const count fruits.reduce((acc, cur) { acc[cur] (acc[cur] || 0) 1 return acc }, {}) console.log(count) // { 苹果: 3, 香蕉: 2, 橙子: 1 }6. 对象数组去重const users [ { id: 1, name: 张三 }, { id: 2, name: 李四 }, { id: 1, name: 王五 }, // id重复 ] const uniqueUsers users.reduce((acc, cur) { if (!acc.find(item item.id cur.id)) { acc.push(cur) } return acc }, []) // [{ id: 1, name: 张三 }, { id: 2, name: 李四 }]最容易混淆的两个点必看1️⃣slicevssplice记一次就够slice不改变原数组切蛋糕不动原蛋糕[1,2,3].slice(1,2)→[2]splice改变原数组删除/插入/替换[1,2,3].splice(1,1)→ 原数组变[1,3]✅ 记忆口诀slice 不改变li 像“离”不离开原数组splice 改变pli 像“plow 犁地”会破坏原结构2️⃣mapvsforEach[1,2].map(x x*2) // ✅ [2,4] 返回新数组 [1,2].forEach(x x*2) // ❌ undefined别用来拿结果✅ 需要拿到新数组→map只想执行副作用打印、更新DOM →forEach一个高频易错提醒sort()默认会按字符串排序[1,2,11].sort() // [1,11,2] ❌ [1,2,11].sort((a,b)a-b) // [1,2,11] ✅✅ 数字排序永远传比较函数(a,b)a-b问题Qmap 和 forEach 的区别答map返回新数组可以链式调用forEach返回 undefined不能链式map用于数据转换forEach用于执行副作用操作如打印、DOM操作Qfind 和 filter 的区别答find返回第一个符合条件的元素找到就停止filter返回所有符合条件的数组find没找到返回undefinedfilter没找到返回[]Qreduce 能做什么答求和、去重、扁平化、分组、统计次数、对象数组去重等是最强大的数组方法。

相关文章:

前端八股JS---数组方法

目录 超简速查表(一图记全部)一、遍历 / 循环类1. forEach2. map3. filter4. reduce二、查找 / 判断类5. find6. findIndex7. includes8. some9. every三、增删改(会改变原数组)10. push11. pop12. unshift13. shift14. splice四…...

通义千问3-Embedding-4B效果展示:多语言长文档检索实测案例

通义千问3-Embedding-4B效果展示:多语言长文档检索实测案例 1. 引言:当4B模型遇上32K长文与119种语言 想象一下,你手头有一份长达几十页、混合了中英文和代码的技术文档,或者一个包含多国语言用户反馈的数据库。你想快速找到所有…...

软萌拆拆屋实战教程:用‘变走丑丑的东西’规避不良生成技巧

软萌拆拆屋实战教程:用‘变走丑丑的东西’规避不良生成技巧 你是不是也遇到过这种情况?想用AI生成一张可爱的服饰拆解图,结果出来的画面要么颜色诡异,要么结构混乱,甚至出现一些奇怪的元素,完全不是想要的…...

虾胡闹,多Agents中的成员正在玩心机

Agents of Chaos研究封面 最近读到一篇很有意思的论文,Northeastern University等机构的20位研究者做了一项为期两周的"红队测试"实验,把AI Agents部署在真实环境中,给了它们Discord账号、邮箱、文件系统和shell权限,然…...

Lightpicture图床系统

LightPicture 是一款用于图片上传与托管展示的系统程序。用户可通过该系统搭建独立的图片存储与分发服务。核心用途将图片文件上传至服务器,并生成可供外部访问的链接地址。主要构成系统包含上传处理模块与前端展示界面,支持常见的图片格式文件。存储支持…...

ATK XCOM串口调试助手:从硬件连接到高效调试的完整指南

1. ATK XCOM串口调试助手入门指南 第一次接触串口调试的朋友可能会觉得有点懵,其实这东西就像是我们和硬件设备之间的"翻译官"。ATK XCOM是正点原子推出的一款专业级串口调试工具,我用过不下十种同类软件,最后还是觉得它最顺手。它…...

树莓派5 AI KIT实战:从YOLOv8模型训练到Hailo HEF部署全链路解析

1. 树莓派5 AI KIT与Hailo模块初探 树莓派5 AI KIT是树莓派基金会推出的最新AI开发套件,搭配Hailo-8L加速模块,能够实现高达13 TOPS的算力。这个组合特别适合需要边缘计算能力的开发者,比如智能监控、工业质检等场景。我自己第一次拿到这套设…...

本地离线运行更安全!AI人脸隐私卫士,保护隐私无需上传云端

本地离线运行更安全!AI人脸隐私卫士,保护隐私无需上传云端 在社交媒体分享、企业宣传、新闻报道等场景中,我们常常需要发布包含人物的照片。然而,未经处理的人脸信息一旦公开,就可能面临隐私泄露的风险。手动给照片中…...

前端性能监控指标体系

前端性能监控指标体系:构建高效用户体验的关键 在当今快节奏的互联网时代,用户体验已成为决定产品成败的关键因素之一。前端性能直接影响用户留存率、转化率以及品牌形象,因此建立一套科学的前端性能监控指标体系至关重要。通过实时监控和分…...

开源AI工具人性化设计:Pixel Fashion Atelier降低视觉疲劳的UI配色方案

开源AI工具人性化设计:Pixel Fashion Atelier降低视觉疲劳的UI配色方案 1. 项目概述 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站,专为时尚设计领域打造。不同于传统AI工具的单调界面,它创新性地融入了…...

**向量数据库实战:用 Python 实现高效语义搜索与多模态检索系统**在现代AI 应用中,**语义理解能力**已经

向量数据库实战:用 Python 实现高效语义搜索与多模态检索系统 在现代 AI 应用中,语义理解能力已经成为核心竞争力之一。传统的关键词匹配方式已经无法满足复杂场景下的查询需求,比如电商商品推荐、智能客服问答、文档相似度分析等。这时候&a…...

# 发散创新:用Python与Stable Diffusion打造AI绘画自动化

发散创新:用Python与Stable Diffusion打造AI绘画自动化流水线 在人工智能迅猛发展的今天,AI绘画已从实验性工具演变为生产力引擎。本文将带你深入实践一个完整的 基于Python Stable Diffusion 的图像生成自动化系统,不仅实现一键式文生图、风…...

CentOS 7.9 SNAT/DNAT 详解与 VMware 17 实验全流程【20260412】003篇

文章目录 一、核心原则:为什么不能直接用 VMware 的「NAT 模式」做 DNAT/SNAT? 二、VMware 环境规划(拓扑图 + IP 分配表) ▶️ 推荐拓扑(最简、最可控、最贴近生产) ▶️ VMware 网络适配器配置(Gateway 虚拟机) ▶️ 虚拟机清单与 IP 分配 三、CentOS 7.9 虚拟机详细…...

CentOS 7.9 SNAT/DNAT 详解与 VMware 17 实验全流程【20260412】002篇

文章目录 🖥️ VMware 17.0 Pro模拟SNAT/DNAT完整实验指南 📋 实验环境总体规划 网络拓扑设计 IP地址规划表 VMware网络配置步骤 步骤1:创建自定义虚拟网络 步骤2:创建三台CentOS 7.9虚拟机 🔧 详细配置步骤 1. 系统基础配置 1.1 配置主机名和网络 1.2 配置各虚拟机网络…...

用Python和NumPy手把手实现SVD图片压缩:从原理到实战,5分钟搞定你的第一张压缩图

用Python和NumPy手把手实现SVD图片压缩:从原理到实战,5分钟搞定你的第一张压缩图 当你第一次听说"奇异值分解"这个名词时,脑海中是不是立刻浮现出一堆复杂的数学公式?别担心,今天我们要用最直观的方式——图…...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf涝

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

Rust的std--ptr--addr_of!:直接获取字段地址绕过对齐检查

Rust的std::ptr::addr_of!:直接获取字段地址绕过对齐检查 Rust作为一门注重内存安全的系统级编程语言,其严格的编译时检查机制在大多数情况下能有效避免未定义行为。在某些底层场景中,开发者可能需要绕过这些限制,直接操作内存地…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)讣

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

CYBER-VISION零号协议实战:从零到一搭建智能助盲眼镜目标分割系统

CYBER-VISION零号协议实战:从零到一搭建智能助盲眼镜目标分割系统 1. 项目背景与核心价值 想象一下,当你走在繁忙的街道上,眼前的一切都是模糊不清的。这就是视障人群每天面临的挑战。传统的导盲杖只能提供有限的触觉反馈,而CYB…...

TrackingNet在线评估全流程指南:从注册到结果查看(附常见问题解决)

TrackingNet在线评估全流程指南:从注册到结果查看(附常见问题解决) 在计算机视觉领域,目标跟踪算法的性能评估是研究过程中不可或缺的一环。TrackingNet作为业内广泛使用的基准测试平台,为研究人员提供了标准化的评估环…...

中文新闻文本分类实战:从 TextCNN → BiLSTM → BERT 三档方案对比(附完整代码)

任务:中文新闻文本分类(如 THUCNews,10/14 类) 目标:给出可直接复现的三种主流方案,实现 对比1. 数据准备 以 THUCNews 为例(每行:label \t text) import torch from to…...

从暴力枚举到高效剪枝:回溯法求解0-1背包的优化之路

1. 从暴力枚举开始:回溯法的原始形态 第一次接触0-1背包问题时,很多人会本能地想到暴力枚举。假设我们有15件物品,每件物品都有选或不选两种可能,那么总共有2^1532768种组合需要检查。这种思路虽然简单直接,但效率极其…...

Go语言的sync.Cond条件变量与通道关闭在广播通知中的语义差异

Go语言中,sync.Cond条件变量与通道关闭均能实现广播通知,但两者在语义和适用场景上存在显著差异。条件变量基于锁的协作机制,适合复杂同步逻辑;而通道关闭则依赖Go的CSP模型,以无锁方式实现轻量级广播。理解二者的差异…...

【限时公开】SITS2026实验室未发布数据:92.7%的商用大模型API在无防护下3.8秒内被FGSM变体攻破?

第一章:SITS2026专家:大模型对抗攻击防护 2026奇点智能技术大会(https://ml-summit.org) 在大模型规模化部署的背景下,对抗样本攻击正从学术威胁演变为真实业务风险——微小扰动即可导致LLM输出恶意指令、泄露训练数据或绕过安全护栏。SITS…...

【2026奇点大会前瞻】:大模型视觉理解的5大技术断层与3个月落地攻坚指南

第一章:2026奇点大会视觉理解技术演进全景图 2026奇点智能技术大会(https://ml-summit.org) 2026奇点大会首次系统性地整合了多模态感知、神经符号推理与具身视觉学习三大范式,标志着视觉理解正从“识别”迈向“可解释因果建模”。本届大会展示的视觉架…...

仅限前500名技术决策者获取:2026奇点大会《大模型工具调用成熟度评估矩阵》(含9维打分表+自测链接)

第一章:2026奇点智能技术大会:大模型工具调用 2026奇点智能技术大会(https://ml-summit.org) 工具调用范式的根本性演进 在2026奇点智能技术大会上,大模型工具调用(Tool Use)已从早期的提示工程驱动,跃迁…...

【GPT-5时代生存指南】:为什么92%的企业微调失败?2026奇点大会首席科学家亲授4步精准对齐法

第一章:GPT-5时代企业微调失败的系统性归因 2026奇点智能技术大会(https://ml-summit.org) 在GPT-5模型架构全面转向混合专家(MoE) 动态稀疏激活范式后,传统基于全参数微调(Full Fine-tuning)或LoRA适配器…...

技术决策中的信息收集与分析判断

技术决策中的信息收集与分析判断:构建智能决策的核心支柱 在数字化时代,技术决策的质量直接影响企业的竞争力和发展潜力。无论是选择技术架构、开发工具,还是评估新兴技术的可行性,信息收集与分析判断都是决策过程中的关键环节。…...

Langchain Agent实战避坑:用通义千问调用高德API,我踩过的异步和工具定义那些坑

Langchain Agent实战避坑指南:异步调用与工具定义的那些坑 在构建基于Langchain的智能代理时,异步调用和工具定义是两个最容易让开发者踩坑的领域。本文将分享我在使用通义千问模型调用高德API过程中遇到的实际问题及其解决方案。 1. 异步调用的常见陷阱…...

【限时技术白皮书】全球首批通过MLPerf Inference v4.0弹性测试的6套扩缩容配置模板(含Qwen3-72B/Gemma3-27B实测参数)

第一章:大模型工程化自动化扩缩容策略 2026奇点智能技术大会(https://ml-summit.org) 大模型服务在生产环境中面临显著的负载波动:推理请求可能在秒级内激增数倍,而空闲时段又需快速释放资源以控制成本。工程化自动化扩缩容并非简单复用传统…...