javascript数组如何操作_常用方法有哪些【教程】

发布时间 - 2026-01-20 00:00:00    点击率:
会直接修改原数组的方法有push()、pop()、shift()、unshift()、splice()、sort()、reverse()、fill()和copyWithin();filter/map/reduce均返回新数组;find/findIndex/includes/indexOf适用于不同查找场景;for...of支持中断,forEach不支持。

JavaScript 数组操作的核心不是背方法列表,而是理解哪些方法会改原数组、哪些返回新数组、哪些适合遍历、哪些适合查找——选错方法会导致隐性 bug 或性能浪费。

哪些数组方法会直接修改原数组?

这类方法副作用明显,容易在不经意间破坏数据源,尤其在 React/Vue 等响应式场景中引发渲染异常。

  • push()pop()shift()unshift():增删首尾元素,返回新长度或被删元素
  • splice():万能修改器,可删、可插、可替,返回被删除的元素数组
  • sort():默认按字符串 Unicode 排序,[10, 2, 30].sort() 得到 [10, 2, 30](不是 [2, 10, 30]),必须传比较函数:arr.sort((a, b) => a - b)
  • reverse():就地翻转,不返回新数组

⚠️ 注意:fill()copyWithin() 也改原数组,但使用频率低,容易被忽略其副作用。

filter / map / reduce 怎么选?

这三个是函数式编程主力,都返回新数组(不改原数组),但语义和用途截然不同。

  • filter():筛选。只保留满足条件的元素,返回等长或更短的新数组。例如:[1,2,3,4].filter(x => x % 2 === 0)[2, 4]
  • map():转换。每个元素按规则映射为新值,返回等长新数组。例如:['a','b'].map(x => x.toUpperCase())['A','B']
  • reduce():聚合。把数组“压成”一个值(可以是对象、数字、字符串甚至新数组)。例如:[1,2,3].reduce((sum, x) => sum + x, 0)6;想扁平化二维数组?arr.reduce((acc, row) => acc.concat(row), [])

别用 map() 做筛选(会留下 undefined),也别用 filter() 做转换(无法改结构)。

find / findIndex / includes / indexOf 有什么区别?

都是查找类方法,但返回值类型和匹配逻辑差异大,混用会导致类型错误或逻辑漏洞。

  • find():返回第一个满足条件的元素值,没找到返回 undefined
  • findIndex():返回第一个满足条件的索引,没找到返回 -1
  • includes():返回 true/false,支持 NaN 检测(indexOf()NaN 返回 -1
  • indexOf():返回首次出现的索引,严格相等(===),对 NaN 失效

查是否存在用 includes() 最安全;要拿元素本身用 find();要改该位置的值,得先 findIndex() 再赋值。

for...of 和 forEach 哪个更适合日常遍历?

两者都用于遍历,但控制流能力完全不同,不能简单互换。

  • for...of:原生语法,支持 breakcontinuereturn(在函数内),可中断循环
  • forEach():是方法调用,不支持 breakreturn 中断(return 只退出当前回调,不影响后续迭代)

需要提前退出(比如找到目标就停)、或需要捕获异常并 continue,必须用 for...of。仅做无条件遍历且逻辑简单时,forEach() 可读性略高。

const arr = [1, 2, 3, 4, 5];
// ✅ 正确:可中断
for (const item of arr) {
  if (item === 3) break;
  console.log(item); // 输出 1, 2
}

// ❌ 无效:return 不会中断 forEach arr.forEach(item => { if (item === 3) return; // 下面的 log 还是会执行 4 和 5 console.log(item); });

真正容易被忽略的是:所有高阶方法(mapfilter 等)内部都创建新数组,大数据量时内存开销明显;而 forfor...of 是零分配。性能敏感场景别无脑链式调用。


# vue  # react  # javascript  # java  # 大数据  # 区别  # 修改器  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: IOS倒计时设置UIButton标题title的抖动问题  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  ,交易猫的商品怎么发布到网站上去?  微信小程序 闭包写法详细介绍  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  香港服务器网站卡顿?如何解决网络延迟与负载问题?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何快速搭建支持数据库操作的智能建站平台?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel怎么实现验证码(Captcha)功能  详解jQuery停止动画——stop()方法的使用  新三国志曹操传主线渭水交兵攻略  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何记录自定义日志?(Log频道配置)  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  文字头像制作网站推荐软件,醒图能自动配文字吗?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  如何快速生成高效建站系统源代码?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何用好域名打造高点击率的自主建站?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  深圳网站制作的公司有哪些,dido官方网站?  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  javascript中闭包概念与用法深入理解  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  教你用AI将一段旋律扩展成一首完整的曲子  微信小程序 require机制详解及实例代码  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  三星网站视频制作教程下载,三星w23网页如何全屏?  深入理解Android中的xmlns:tools属性  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  如何基于PHP生成高效IDC网络公司建站源码?  Laravel如何实现API资源集合?(Resource Collection教程)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何快速查询网址的建站时间与历史轨迹?  在Oracle关闭情况下如何修改spfile的参数  教你用AI润色文章,让你的文字表达更专业  googleplay官方入口在哪里_Google Play官方商店快速入口指南  JavaScript Ajax实现异步通信  图册素材网站设计制作软件,图册的导出方式有几种?