扩展运算符...可简洁实现数组浅拷贝和合并,支持去重、过滤等操作,但仅限一维、不适用类数组,超大数组或深拷贝需其他方案。

JavaScript 中用扩展运算符 ... 合并和复制数组,简洁又直观,不需要调用 concat() 或 slice() 等方法。
用 ... 快速复制数组
扩展运算符能把原数组的每一项“展开”成独立参数,再放进新数组里,实现浅拷贝:
const arr1 = [1, 2, 3]; const arr2 = [...arr1]; // [1, 2, 3] arr2.push(4); console.log(arr1); // [1, 2, 3] — 原数组没变 console.log(arr2); // [1, 2, 3, 4]
- 只适用于一维数组;嵌套对象或数组仍共享引用
- 比
arr1.slice()或Array.from(arr1)更易读 - 不能直接用于类数组(如
arguments或NodeList),需先转为真数组或配合Array.from
用 ... 合并多个数组
把多个数组依次展开,放进一个新数组即可,顺序即合并顺序:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const a = [1, 2]; const b = [3, 4]; const c = [5]; const merged = [...a, ...b, ...c]; // [1, 2, 3, 4, 5]
- 支持任意数量的数组,也可混入字面量值:
[...a, 99, ...b] - 比
a.concat(b, c)更灵活,比如中间插入新元素、去重后再合并等 - 不修改原数组,始终返回新数组
合并时去重或过滤的小技巧
扩展运算符常和 Set 或 filter 搭配,实现带逻辑的合并:
立即学习“Java免费学习笔记(深入)”;
// 去重合并 const uniqueMerged = [...new Set([...a, ...b, ...c])]; <p>// 过滤掉负数再合并 const positiveMerged = [...a, ...b, ...c].filter(x => x >= 0);</p><p>// 合并后映射处理 const doubled = [...a, ...b].map(x => x * 2);
-
Set自动去重,但会丢失重复项的顺序(首次出现位置保留) - 如果需按原顺序去重,可用
filter+indexOf或Map记录已见项 - 所有操作都保持函数式风格:输入不变、输出新数组
注意:不是万能替代,有适用边界
扩展运算符本质是“展开可迭代对象”,对超大数组可能触发调用栈溢出(V8 引擎限制约 10 万项):
- 数万级数据建议用
push.apply或循环for合并 - 深层嵌套数组需递归或
flat()配合,...只展开一层 - 想深拷贝整个结构,得用
JSON.parse(JSON.stringify())或结构化克隆(structuredClone)

















