Array.prototype.reverse()

基线 广泛可用

此功能已得到良好确立,并在许多设备和浏览器版本上都能正常工作。它已在浏览器中可用,自 2015 年 7 月.

reverse() 方法是 Array 实例的方法,它就地反转数组,并返回对同一数组的引用,第一个数组元素现在成为最后一个,最后一个数组元素成为第一个。换句话说,数组中元素的顺序将转向与之前陈述相反的方向。

要反转数组中的元素而不修改原始数组,请使用 toReversed()

试一试

语法

js
reverse()

参数

无。

返回值

对现在已反转的原始数组的引用。请注意,数组是就地反转的,并且没有创建副本。

描述

reverse() 方法就地转置调用数组对象的元素,修改数组,并返回对数组的引用。

reverse() 方法保留空槽。如果源数组是稀疏的,则空槽对应的新的索引将被删除,并且也成为空槽。

reverse() 方法是泛型的。它只期望this值具有length属性和整数键属性。尽管字符串也是类似数组的,但此方法不适合应用于它们,因为字符串是不可变的。

示例

反转数组中的元素

以下示例创建了一个名为items的数组,其中包含三个元素,然后反转该数组。对reverse()的调用返回对反转后的数组items的引用。

js
const items = [1, 2, 3];
console.log(items); // [1, 2, 3]

items.reverse();
console.log(items); // [3, 2, 1]

reverse() 方法返回对同一数组的引用

reverse() 方法返回对原始数组的引用,因此修改返回的数组也将修改原始数组。

js
const numbers = [3, 2, 4, 1, 5];
const reversed = numbers.reverse();
// numbers and reversed are both in reversed order [5, 1, 4, 2, 3]
reversed[0] = 5;
console.log(numbers[0]); // 5

如果您希望reverse()不修改原始数组,而是像其他数组方法(例如 map())那样返回一个浅复制的数组,请使用 toReversed() 方法。或者,您可以在调用reverse()之前进行浅复制,使用扩展语法Array.from()

js
const numbers = [3, 2, 4, 1, 5];
// [...numbers] creates a shallow copy, so reverse() does not mutate the original
const reverted = [...numbers].reverse();
reverted[0] = 5;
console.log(numbers[0]); // 3

在稀疏数组上使用 reverse()

调用reverse()后,稀疏数组仍然是稀疏的。空槽被复制到它们各自的新索引作为空槽。

js
console.log([1, , 3].reverse()); // [3, empty, 1]
console.log([1, , 3, 4].reverse()); // [4, 3, empty, 1]

在非数组对象上调用 reverse()

reverse() 方法读取thislength属性。然后,它访问每个具有介于0length / 2之间的整数键的属性,并在两端交换两个对应的索引,删除源属性不存在的任何目标属性。

js
const arrayLike = {
  length: 3,
  unrelated: "foo",
  2: 4,
  3: 33, // ignored by reverse() since length is 3
};
console.log(Array.prototype.reverse.call(arrayLike));
// { 0: 4, 3: 33, length: 3, unrelated: 'foo' }
// The index 2 is deleted because there was no index 0 present originally
// The index 3 is unchanged since the length is 3

规范

规范
ECMAScript 语言规范
# sec-array.prototype.reverse

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅