推荐使用扩展运算符(如[...arr, newitem])替代push()以保持不可变性,其次可选concat()、array.from+concat或reduce组合实现灵活追加。
想避免 push() 直接修改原数组?用不改变原数组的方法替代,是现代 javascript 开发中保持数据不可变性的关键做法。核心思路是:生成新数组,而非改动旧数组。
扩展运算符(最推荐)
语法简洁、语义清晰,适合大多数场景:
- 向末尾添加单个或多个元素:
[...arr, newItem]或[...arr, ...newItems] - 合并多个数组:
[...arr1, ...arr2, ...arr3] - 支持混合类型参数,比如
[...arr, 'x', 42, ...[7, 8]] - 原数组完全不受影响,返回全新数组
concat() 方法(兼容性好)
传统但可靠,尤其适合需要支持较老环境的项目:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 添加元素:
arr.concat(item)或arr.concat(item1, item2) - 合并数组:
arr.concat(arr2, arr3) - 传入数组时会自动展开元素(区别于
push([1,2])会塞进一个子数组) - 也可写成
arr.concat()实现浅拷贝
Array.from + push 模拟(按需定制)
当需要更灵活控制(如插入位置、条件过滤),可组合使用:
- 例如末尾追加:
Array.from(arr).concat(newItem) - 或更通用:
[...Array.from(arr), newItem] - 适合封装成工具函数,比如
pushImmutable(arr, ...items)
函数式写法配合 reduce(处理复杂逻辑)
如果拼接逻辑涉及转换、过滤或条件判断,reduce 更具表达力:
arr.reduce((acc, val) => [...acc, val], [...initial, ...toAdd])- 适合链式操作或与 map/filter 等组合使用
- 虽稍重,但在 Redux、React state 更新等强调纯函数的场景中很自然
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










