javascript数组有哪些方法_如何高效地操作数组数据【教程】
发布时间 - 2026-01-28 00:00:00 点击率:次JavaScript数组中会改变原数组的方法有push、pop、shift、unshift、splice、reverse、sort、fill、copyWithin;安全生成新数组应优先使用展开语法与非变异方法组合。
JavaScript 数组方法很多,但真正高频、安全、可预测的其实就十几个;盲目用 map、filter 并不等于高效,关键看是否匹配场景、是否产生意外副作用、是否误用稀疏数组或 undefined。
哪些数组方法会改变原数组(mutating)?
这是最容易踩坑的一类——你以为在“转换”,结果把原始数据改了,后续逻辑全乱。
-
push、pop、shift、unshift:增删首尾元素,返回新长度或被删值,原数组变 -
splice:万能修改器,既能删又能插还能替,原数组变,返回被删元素数组 -
reverse、sort:看起来是“整理”,实则原地翻转或排序,sort()默认按字符串比较,[10, 2].sort()得到[10, 2]而不是[2, 10] -
fill、copyWithin:冷门但危险,直接写入原数组指定位置
⚠️ 注意:forEach 不改变原数组,但它也不返回新数组——别把它当 map 用;想链式调用或生成新数据,优先选非 mutating 方法。
如何安全地生成新数组而不污染原始数据?
除非明确需要副作用,否则默认应使用不可变操作。现代 JS 中最可靠的是展开语法 + 非 mutating 方法组合。
- 替代
push:[...arr, newItem](比arr.concat(item)更直观) - 替代
unshift:[newItem, ...arr] - 替代
filter+map连用:arr.filter(x => x > 0).map(x => x * 2)安全且可读 - 深拷贝慎用:
JSON.parse(JSON.stringify(arr))会丢函数、undefined
、Date、NaN、循环引用;真要深拷贝考虑
structuredClone(arr)(现代环境支持)或专用库
⚠️ 注意:slice() 和 concat() 是浅拷贝,对象元素仍共享引用——arr.slice()[0].prop = 1 会改原始数组里的对象。
find / findIndex vs indexOf / includes 怎么选?
核心区别在于匹配逻辑粒度:基础值查等号,复杂条件必须用 find 系列。
-
indexOf和includes只做严格相等(===),适用于字符串、数字、布尔值等基本类型查找 -
find接收回调函数,可基于任意条件返回第一个匹配项(如arr.find(x => x.id === 123)) -
findIndex返回索引而非值,适合后续要splice或更新的场景;但注意它返回-1表示未找到,不是 falsy 值,别直接if (findIndex(...)) -
some和every是布尔判断替代品,比find更轻量(不构造中间值)
⚠️ 注意:includes 对 NaN 友好([NaN].includes(NaN) === true),而 indexOf(NaN) 返回 -1,因为 NaN !== NaN。
性能敏感场景下,什么时候该放弃高阶函数?
不是所有 for 循环都该被取代。当数组很大(>10k)、逻辑简单、或需提前退出时,传统循环仍有优势。
-
for循环可随时break或continue,而some/every虽可中断,filter/map则必须遍历全部 -
for避免了函数调用开销和闭包创建,在 V8 等引擎中更容易被优化 - 用
for...of比forEach略快(无回调函数),且支持break;但不兼容稀疏数组(会跳过空槽位) - 避免在循环中反复调用
arr.length—— 提前缓存,如for (let i = 0, len = arr.length; i
真实项目里,90% 场景用 map/filter/find 完全没问题;但如果你在处理实时渲染数据、解析大 JSON、或做 canvas 像素计算,手写 for 往往更可控。
# javascript
# java
# js
# json
# 回调函数
# 区别
# 修改器
# canva
# red
# if
# sort
# for
# foreach
# date
# Filter
# break
# continue
# 字符串
# 循环
# Length
# 闭包
# len
# map
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何在阿里云部署织梦网站?
如何快速生成凡客建站的专业级图册?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何快速搭建支持数据库操作的智能建站平台?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
JS去除重复并统计数量的实现方法
详解Android——蓝牙技术 带你实现终端间数据传输
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
如何在 Pandas 中基于一列条件计算另一列的分组均值
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
昵图网官网入口 昵图网素材平台官方入口
如何正确选择百度移动适配建站域名?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
如何在IIS中新建站点并配置端口与物理路径?
Laravel如何使用Gate和Policy进行授权?(权限控制)
Swift中循环语句中的转移语句 break 和 continue
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何自定义建站之星网站的导航菜单样式?
非常酷的网站设计制作软件,酷培ai教育官方网站?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
黑客如何利用漏洞与弱口令入侵网站服务器?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何快速搭建高效WAP手机网站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
中国移动官方网站首页入口 中国移动官网网页登录
深入理解Android中的xmlns:tools属性
如何快速搭建虚拟主机网站?新手必看指南
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
网页设计与网站制作内容,怎样注册网站?
北京网站制作的公司有哪些,北京白云观官方网站?
如何快速搭建高效香港服务器网站?
JavaScript如何实现倒计时_时间函数如何精确控制
使用Dockerfile构建java web环境
PHP 500报错的快速解决方法
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel distinct去重查询_Laravel Eloquent去重方法
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】


