如何在JavaScript中反转一个数组

273 阅读2分钟

反转数组是一个非常流行的编码问题,在申请入门级的JavaScript开发人员职位时,经常被作为面试问题问到。有时你会被要求修改原始数组,使第一个元素变成最后一个,第二个元素变成数组的倒数第二个元素,以此类推。有时你可能会被要求在不改变原始数组的情况下对数组进行反转。

在这篇文章中,我们将看看在JavaScript中用于反转数组的不同方法;这些方法将包括反转原始数组的方法,以及可以用来制作一个新的反转数组的方法。

如何使用JavaScript的reverse()方法

JavaScript中的反转方法用于反转数组内容的索引,使数组的最后一个元素变成数组的第一个元素,反之亦然。

语法

array.reverse()

JavaScript的反向方法不接受任何参数,与数组的名称结合使用。让我们来看看反向方法的一个例子。

let employeeNames = ['John', 'Jack', 'Chris', 'Hank'];
console.log(employeeNames.reverse());

注意:这个方法修改了原始字符串。

如何在不改变原数组的情况下反转数组元素

如上所述,反向方法修改了原始数组。因此,如果你想在不修改原始数组的情况下反转数组,你将不得不使用另一种方法。不幸的是,JavaScript并没有一个特定的方法来实现这个功能,相反,我们必须使用不同的方法组合来实现这个功能。

我们将学习的第一个方法是使用传播操作符和反向方法。首先,你将通过使用传播操作符复制数组,然后在新创建的数组上调用反向方法。

let employeeNames = ['John', 'Jack', 'Chris', 'Hank'];
let reverseArr = [...employeeNames].reverse();
console.log(employeeNames);
console.log(reverseArr);

我们也可以使用push和unshift方法,结合for循环,在不修改原始数组的情况下反转数组。

let employeeNames = ['John', 'Jack', 'Chris', 'Hank'];
let reverseArr = [];

for (let i = 0; i <= employeeNames.length - 1; i++) {
   reverseArr.unshift(employeeNames[i]);

}

console.log(reverseArr);

在上面的例子中,我们从i = 0开始循环,因为数组的索引从0开始;然后我们将条件设置为i <= employeeNames.length - 1,因为数组中的最高索引总是比数组中的元素总数少一个数字。

在for循环中,我们使用unshift函数将employeeNames数组的元素添加到新的reverseArr数组中。在循环的第一次迭代中,i等于0,所以employeeNames[i]选择了数组的第一个元素,unshift函数将其放在reverseArr的第一个索引上。在第二次迭代中,i等于1,所以employeeNames[i]选择了数组的第二个元素,unshift函数将其放在第一个索引上。之前出现在第一个索引上的元素现在移到第二个索引上。这个过程会一直重复下去,直到到达最后一个元素,整个数组被反转。

我们也可以使用push方法以同样的方式反转一个数组,但为此我们必须使用一个递减的for循环索引。

let employeeNames = ['John', 'Jack', 'Chris', 'Hank'];
let reverseArr = [];

for (let i = employeeNames.length - 1; i >= 0; i--) {
  reverseArr.push(employeeNames[i]);

}

console.log(reverseArr);

结论

反转数组中的元素是每个人在刚开始学习编程/脚本语言时都应该尝试的编码挑战之一;它经常在编码测验和面试中被问及。

在这篇文章中,我们使用了内置的反转方法来反转一个JavaScript数组;这个方法修改了原始数组,所以我们也学习了其他的方法,在保留原始数组的情况下反转一个数组。为了这个目的,我们学习了结合for循环使用spread operator和push,unshift方法。