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:原生语法,支持break、continue、return(在函数内),可中断循环 -
forEach():是方法调用,不支持break或return中断(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);
});
真正容易被忽略的是:所有高阶方法(map、filter 等)内部都创建新数组,大数据量时内存开销明显;而 for 或 for...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实现异步通信
图册素材网站设计制作软件,图册的导出方式有几种?

