通过拷贝实现数组逆序的核心是创建新数组并按原数组反向顺序赋值:可用for循环从后往前拷贝,或用slice().reverse()、[...arr].reverse()等简洁方法,均属浅拷贝,对象元素仍共享引用。

通过拷贝实现数组元素逆序,核心思路是:**创建一个新数组,按原数组的反向顺序逐个拷贝元素**。这不是原地翻转,不修改原数组,而是生成一个逆序的新副本。
使用循环从后往前拷贝
最直观的方式是用 for 循环,从原数组末尾开始遍历,依次将元素赋值到新数组的开头位置。
- 设原数组为 arr,长度为 n
- 新建长度为 n 的数组 reversed
- 令 i 从 n−1 递减到 0,同时用索引 j(从 0 开始)向 reversed 拷贝:
reversed[j] = arr[i]; j++
利用数组方法 slice() + reverse()
这是简洁高效的写法,本质仍是“拷贝后逆序”:
- arr.slice() 创建原数组的浅拷贝(新数组)
- 再调用 .reverse() 对这个副本进行逆序操作
const reversed = arr.slice().reverse(); - 注意:reverse() 会改变调用它的数组,但因前面用了 slice(),原数组不受影响
使用扩展运算符 + reverse()
现代 JavaScript 中更推荐的写法,语义清晰且不可变:
- [...arr] 展开原数组,生成一个新数组
- 链式调用 .reverse()
const reversed = [...arr].reverse(); - 同样不修改原数组,适合函数式编程风格
注意事项
所有上述方法都基于**浅拷贝**:
- 对数字、字符串、布尔值等基本类型,拷贝的是值本身,完全独立
- 对对象或嵌套数组,拷贝的是引用,新数组中的对象仍指向原对象——若需深逆序,请先深拷贝再逆序
- 若只是需要遍历逆序而非保存结果,可直接倒序循环,无需额外拷贝空间











