当前位置:首页 > 技巧大全 > 其他编程 > 正文内容

在JavaScript中反转数组(数组倒序)

Git开源网2022-11-18 21:46:59其他编程311

在本指南中,我们将使用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_arraystring_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

扫描二维码推送至手机访问。

版权声明:本文由Git开源网_git开源代码资源网_git开源博客发布,如需转载请注明出处。

本文链接:http://gitoscc.com/?id=884

相关文章

python解析含有重复key的json方法

python自带的json包能够方便的解析json文本,但是如果json文本中包含重复key的时候,解析的结果就是错误的。如下为例{"key":"1", "key":&q...

Jquery-自定义alert弹窗提示,自动消失

Jquery-自定义alert弹窗提示,自动消失

1.js实现代码  /* * 说明: 弹窗提示,3秒后自动消失 * 调用: alert_tips('操作成功','success'); * ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。