JavaScript数组操作分“不修改原数组”和“直接修改原数组”两类:前者如slice、map、filter等返回新数组,安全常用;后者如push、pop、splice等改变原数组,需谨慎使用。

JavaScript 数组操作核心在于“不直接修改原数组”和“直接修改原数组”两类方法的区分,用错容易引发意外 bug。掌握常用方法的关键是理解它们的返回值、是否改变原数组、以及适用场景。
创建与基础操作
数组创建最常用的是字面量 [],也可用 Array() 构造函数(但需注意单个数字参数的歧义)。访问元素用方括号索引(从 0 开始),length 属性可读可写——设为更小值会截断数组,设为更大值只是扩展长度,新增位置值为 undefined。
不改变原数组的方法(安全常用)
这类方法返回新数组或新值,原数组保持不变,适合函数式编程和避免副作用:
-
slice(start, end):浅拷贝部分元素,不包含 end 索引位置;省略参数可实现完整拷贝(如
[...arr]或arr.slice()) - concat(...arrays):合并多个数组或值,返回新数组
- map(callback):对每个元素执行回调,返回映射后的新数组(常用于数据转换)
- filter(callback):返回满足条件的元素组成的新数组
- find(callback) 和 findIndex(callback):分别返回首个匹配项或其索引(未找到返回 undefined / -1)
- includes(value)、indexOf(value):判断存在性或查找位置
直接修改原数组的方法(谨慎使用)
这些方法会改变原始数组,调用后原数组已变,后续逻辑需留意:
立即学习“Java免费学习笔记(深入)”;
- push(...items):末尾添加,返回新长度
- pop():删除末尾,返回被删元素
- unshift(...items):开头添加,返回新长度
- shift():删除开头,返回被删元素
- splice(start, deleteCount, ...items):万能修改器——可删除、插入、替换(返回被删除的元素数组)
- reverse() 和 sort([compareFn]):就地翻转或排序(注意 sort 默认按字符串 Unicode 排序,数字需传比较函数)
遍历与聚合
除 for 循环外,语义化遍历更清晰:
- forEach(callback):仅遍历,无返回值(不能 break,可用 some/every 替代中断需求)
- some(callback) 和 every(callback):判断是否存在/是否全部满足,返回布尔值
- reduce(callback, initialValue):累计计算(如求和、扁平化、分组),callback 接收累加器和当前值
- flat(depth):数组扁平化(默认 depth=1,可传 Infinity 完全展开)
实际开发中优先选用不修改原数组的方法,配合解构赋值、扩展运算符提升可读性。需要修改原数组时,明确意图并做好注释。多数场景下 map/filter/reduce 组合能替代复杂循环,代码更简洁可靠。











