环球热文:ES6怎么求数组反转

时间:2022-10-26 18:50:50       来源:PHP中文网

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

在工作面试和编码测试中,反转具有特定限制的数组是最常见的挑战之一。


(相关资料图)

在ES6中,可以利用数组对象的reverse()方法来实现数组反转。reverse()方法可反转数组元素的顺序,第一个元素变成最后一个元素,最后一个元素变成第一个元素。

如何使用Reverse方法反转JavaScript中的数组

let numbers = [1, 2, 3, 4, 5];let reversedNumbers = numbers.reverse();console.log(reversedNumbers);// [5, 4, 3, 2, 1]
登录后复制

但是请记住,reverse方法会修改原始数组:

let numbers = [1, 2, 3, 4, 5];let reversedNumbers = numbers.reverse();console.log(reversedNumbers);// [5, 4, 3, 2, 1]console.log(numbers);// [5, 4, 3, 2, 1]
登录后复制

一些编码挑战可能希望您保留原始数组,因此让我们看一下如何在不更改原始数组的情况下反转数组。

如何使用Spread运算符反转JavaScript中的数组

你可以结合使用扩展运算符(Spread)和 reverse方法来反转数组,而无需更改原始数组。

首先,通过用方括号 []括住spread语法,将spread运算符返回的元素放入新数组中:

[...numbers]
登录后复制

然后,你在数组上调用 reverse方法。这样,将在新数组而不是原始数组上执行 reverse方法:

let numbers = [1, 2, 3, 4, 5];let reversedNumbers = [...numbers].reverse();console.log(reversedNumbers);// [5, 4, 3, 2, 1]console.log(numbers);// [1, 2, 3, 4, 5]
登录后复制

如何使用Slice和Reverse方法反转JavaScript中的数组

slice方法用于将所选元素作为新数组返回,当你调用不带任何参数的方法时,它将返回一个与原始数组相同的新数组(从第一个元素到最后一个元素)。

接下来,你在新返回的数组上调用 reverse方法,这就是为什么原始数组不反转的原因:

let numbers = [1, 2, 3, 4, 5];let reversedNumbers = numbers.slice().reverse();console.log(reversedNumbers);// [5, 4, 3, 2, 1]console.log(numbers);// [1, 2, 3, 4, 5]
登录后复制

如何在没有Reverse方法的情况下在JavaScript中反转数组

有时面试会挑战你对数组进行逆向操作,而不采用 reverse方法。没问题!你可以使用 for循环和数组 push方法的组合,就像下面的例子。

let numbers = [1, 2, 3, 4, 5];let reversedNumbers = [];for(let i = numbers.length -1; i >= 0; i--) {  reversedNumbers.push(numbers[i]);}console.log(reversedNumbers);
登录后复制

如何用JS编写自己的反转函数

最后,假设你的任务是编写自己的反转函数,该函数需要在不创建副本的情况下反转数组。乍一看,这似乎很复杂,但是不用担心,因为它实际上很简单。

在这里你需要做的是交换数组的第一个和最后一个元素,然后交换第二个和倒数第二个元素,依此类推,直到交换了所有元素。

让我们编写一个函数来做到这一点。

编写函数 customReverse,并使用 array.length - 1作为变量,同时存储第一个索引为 0和最后一个索引。

function customReverse(originalArray) {  let leftIndex = 0;  let rightIndex = originalArray.length - 1;}
登录后复制

接下来,创建一个 while循环,只要 leftIndex小于 rightIndex,它就会运行。

在此循环内,交换 leftIndexrightIndex的值,你可以将值之一临时存储在临时变量中:

while (leftIndex < rightIndex) {  // 交换元素  let temp = originalArray[leftIndex];  originalArray[leftIndex] = originalArray[rightIndex];  originalArray[rightIndex] = temp;}
登录后复制

最后,将 leftIndex向上移动,将 rightIndex向下移动,当 while循环重复时,它将交换倒数第二个元素,依此类推:

function customReverse(originalArray) {  let leftIndex = 0;  let rightIndex = originalArray.length - 1;  while (leftIndex < rightIndex) {    // 用temp变量交换元素    let temp = originalArray[leftIndex];    originalArray[leftIndex] = originalArray[rightIndex];    originalArray[rightIndex] = temp;    // 将索引移到中间    leftIndex++;    rightIndex--;  }}
登录后复制

当没有其他要反转的元素时,循环将立即停止。对于奇数的数组 leftIndexrightIndex的值会相等,所以不用再交换。对于偶数的数组 leftIndex将大于 rightIndex

你可以测试该功能以查看其是否正常工作,如下所示:

let myArray = [1, 2, 3, 4, 5];customReverse(myArray);console.log(myArray);// output is [5, 4, 3, 2, 1]
登录后复制

【相关推荐:javascript视频教程、编程视频】

以上就是ES6怎么求数组反转的详细内容,更多请关注php中文网其它相关文章!

关键词: 的情况下 依此类推