reverse和sort均为原地修改数组的方法:reverse直接倒序排列元素;sort默认按字符串unicode码点排序,数字需传入比较函数如(a,b)=>a-b才能正确排序。

reverse 和 sort 都是 JavaScript 数组的**原地方法**,即直接修改原数组,不创建新数组。
reverse:简单倒序,无需参数
它把数组元素顺序完全颠倒,从末尾到开头排列,返回修改后的原数组。
- 不接受任何参数,行为确定,无歧义
- 对字符串、数字、对象等任意类型都按索引位置翻转,不涉及比较逻辑
- 如果想保留原数组,调用前先用
slice()或展开运算符复制一份
const arr = [1, 2, 3];<br>arr.reverse(); // [3, 2, 1]<br>console.log(arr); // [3, 2, 1](原数组已变)
sort:默认按字符串 Unicode 码点排序
不传参时,sort() 会把每个元素先转成字符串,再按字符编码升序排列——这常导致数字排序出人意料。
-
[10, 2, 30].sort()→[10, 2, 30](因为 '10' - 要正确排序数字,必须传入比较函数:
(a, b) => a - b(升序)或(a, b) => b - a(降序) - 比较函数返回值逻辑:
负数 → a 排在 b 前;
正数 → a 排在 b 后;
0 → 顺序不变
const nums = [10, 2, 30];<br>nums.sort((a, b) => a - b); // [2, 10, 30]<br>nums.sort((a, b) => b - a); // [30, 10, 2]
注意:两者都改变原数组,不是“返回新数组”
如果你需要保持原数组不变,务必先拷贝:
- 浅拷贝数字/字符串数组:
arr.slice()、[...arr]或Array.from(arr) - 深拷贝含嵌套对象的数组需额外处理(如
JSON.parse(JSON.stringify(arr))或结构化克隆)
例如:const sorted = [...arr].sort((a, b) => a - b); —— 原 arr 不受影响。
小技巧:用 sort 实现 reverse 效果
若想“按某种规则倒序”,不要先 sort 再 reverse(低效且易错),而是直接反转比较逻辑:
- 升序:
(a, b) => a - b - 降序:
(a, b) => b - a(等价于(a, b) => -(a - b)) - 字符串降序:
(a, b) => b.localeCompare(a)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











