在JavaScript中反转数组(数组倒序)
在本指南中,我们将使用reverse()方法、函数式编程和手动for循环,看看如何在JavaScript中反转数组或列表--包括就地和非就地。有几种方法可以做到这一点,至于你想采用哪一种,通常取决于你的个人偏好。
我们将对这两个数组进行反转:
let numArr = [1, 2, 3, 4, 5] let strArr = ['Java', 'Python', 'JavaScript']
使用Array.reverse()
反转一个数组最简单的方法是通过reverse()
方法:
let numArrReversed = numArr.reverse(); let strArrReversed = strArr.reverse(); console.log(numArrReversed); //[ 5, 4, 3, 2, 1 ] console.log(strArrReversed); //[ 'JavaScript', 'Python', 'Java' ]
注意: reverse()
方法将数组就地反转。这意味着原来的num_array
和string_array
被反转,原来的序列被丢失。
你不需要创建一个新的变量来存储内存中这些数组的指针,因为原来的指针已经指向反转的数组了:
numArr.reverse(); strArr.reverse(); console.log(numArr); console.log(strArr);
这也导致了:
[ 5, 4, 3, 2, 1 ] [ 'JavaScript', 'Python', 'Java' ]
然而,通常的做法是将结果"分配"给一个新的变量,以表示改变了的状态,或者至少给转换后的数组分配一个更有指示性的名字,如array_reversed
。
在功能上颠倒一个阵列
函数式编程是对大多数imperative编程语言的一个奇妙的补充。函数式结构允许我们用直观和简单的指令对对象和序列进行各种甚至是复杂的转换操作。
许多开发者都喜欢使用函数式结构,因此,反转数组通常也是通过函数式结构完成的,这一点也不奇怪。这种方法允许你在反转的同时进行另一种转换,比如增加或改变元素。
为了在JavaScript中对数组进行功能化反转,我们将利用传播操作符和map()
函数:
// 保留原始阵列 let numArrReversed = numArr.map(numArr.pop, [...numArr]); // 不保留原始阵列 let strArrReversed = [...strArr].map(strArr.pop, strArr);
map()
方法映射了numArr
中的每个popped元素(移除最后一个元素),并将其推入一个新的数组,该数组被创建为numArr
的副本。通过移除最后一个元素并将其作为第一个元素加入新数组,我们创建了一个新的反转数组。
第一种方法处理的是numArr
对象的冻结拷贝,因此没有修改原始数组。
在第二种方法中,我们修改了原始数组,因为我们在map()
方法中使用了对原始数组的引用,尽管我们事先创建了一个数组的副本:
console.log('Original num_array: ' + numArr); console.log('Original string_array: ' + strArr); console.log('Reversed num_array: ' + numArrReversed); console.log('Reversed string_array: ' + strArrReversed);
因此,当一切都完成后num_array
保持不变,而string_array
则消失:
Original num_array: 1,2,3,4,5 Original string_array: Reversed num_array: 5,4,3,2,1 Reversed string_array: JavaScript,Python,Java
用for
循环来反转数组
最后,好的老办法是简单地将数组按倒序运行for
循环,并将每个元素添加到一个新的数组中。
这对于创建一个新的反转数组非常有效,但是不能原地反转旧的数组。如果你想就地反转,你需要使用unshift()
方法在数组的开始添加元素,同时splicing(就地操作)持续进行:
function reverse(array) { let newArr = []; for(i = array.length-1; i >= 0; i--) { newArr.push(array[i]); } return newArr; } function reverseInPlace(array) { for(i = 0; i < array.length; i++) { let tmp = array.splice(i, 1)[0]; array.unshift(tmp); } return array; }
你可以使用这些方法作为:
let numArrReversed = reverseInPlace(numArr); let strArrReversed = reverse(strArr); console.log('Original num_array: ' + numArr); console.log('Original string_array: ' + strArr); console.log('Reversed num_array: ' + numArrReversed); console.log('Reversed string_array: ' + strArrReversed);
这导致了:
Original num_array: 5,4,3,2,1 Original string_array: Java,Python,JavaScript Reversed num_array: 5,4,3,2,1 Reversed string_array: JavaScript,Python,Java
原文:https://news.sangniao.com/p/1193886063