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

本教程将向您展示在JavaScript中使用和不使用 reverse 方法来反转数组的五种方法,以及可以使用的代码段。

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

当需要在JavaScript中反转数组时,可以使用 reverse 方法,该方法将最后一个元素放在第一位,而第一个元素放在最后:

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]

注意spread 方法是ES6语法,当你需要支持较旧的浏览器或要使用ES5语法时,可以结合使用 slicereverse 方法。让我们现在来看。

如何使用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中反转数组,还学会了如何编写自己的反向函数。

JavaScript数组反转教程相关推荐

  1. JavaScript数组对象教程–如何使用JS数组方法创建,更新和遍历对象

    On average I work with JSON data 18 times a week. And I still need to google for specific ways to ma ...

  2. js数组反转的几种方法 #javaScript

    第一种:reverse() let arr=[10,20,30,40,50]console.log(arr.reverse()); //使用数组反转方法来进行反转 第二种: 使用for循环进行反转 l ...

  3. JavaScript新手入门教程大全~~~

    JavaScript新手入门教程大全~~~ 一. js教程介绍:JavaScript是一种运行在浏览器中的解释型的编程语言. 那么问题来了,为什么我们要学JavaScript?因为你没有选择.在Web ...

  4. 深入浅出 JavaScript 数组 v0.5

    有一段时间不更新博客了,今天分享给大家的是一篇关于JS数组的,数组其实比较简单,但是用法非常灵活,在工作学习中应该多学,多用,这样才能领会数组的真谛. 以下知识主要参考<JS 精粹>和&l ...

  5. Javascript数组操作(转)

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  6. Javascript数组操作方法

    1.shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined  var a = [1,2,3,4,5];  var b = a.shift(); //a:[2,3,4,5 ...

  7. JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写.遍历.比较.排序等操作及算法改进相关实现技巧,需要的朋友可以参考下 测试用例: arr = ...

  8. javascript数组的属性、方法和清空-最全!!!(必看)

    今天经理要我从新看一遍js,当我再看<精通js和jquery>这本书时,发现关于数组的这章节讲的很少,于是想自己总结一下数组的常用方法. 定义数组: var arr = new Array ...

  9. JavaScript 数组 API 全解析

    在编程世界中,数组是指元素的集合.数组将数据作为元素进行存储,并在需要时将其取出. 在支持数组的编程语言中广泛地采用了这个数据结构. 这个手册会介绍 JavaScript 数组的所有知识.你将会学到复 ...

  10. 在JavaScript中反转字符串的三种方法

    This article is based on Free Code Camp Basic Algorithm Scripting "Reverse a String" 本文基于F ...

最新文章

  1. Topshelf:一款非常好用的 Windows 服务开发框架
  2. 黑客帝国真的可以!这100万个「活体人脑细胞」5分钟学会打游戏
  3. HDOJ How many ways?? 2157【矩阵高速幂】
  4. NET仿微信Oauth2.0
  5. (AIDE)Android Eclipse JNI 调用 .so文件加载问题
  6. php检测类是否存在,php判断类是否存在函数class_exists用法分析
  7. 用 subsetting 限制连接池中的连接数量
  8. 信用评分python_信用评分卡(python)
  9. android studio 工程demo例子,Android Studio 实现跑马灯微项目实例
  10. 计算机路表配置命令,计算机、华为交换机、路由器配置命令表
  11. Git——单人操作及多人协同操作
  12. android 函数名注册,Android JNI 函数注册的两种方式(静态注册/动态注册)
  13. 【转】对JavaScript调用堆栈和setTimeout用法的深入研究
  14. 解决Windows下文件无法删除的问题
  15. c语言早期标准没有数据转换,标准C语言2
  16. 吉他录音混音教程|连这些录音知识都不懂,以后还怎么“混”?| MZD Studios
  17. idea--Preferences
  18. This may be due to a lack of SYSV IPC support
  19. linux gt; gt;gt;区别,linux中amp;gt;什么意思? - 懂得
  20. 六角螺栓尺寸规格参照

热门文章

  1. Echats给柱状图及提示文字添加百分号(%)的解决办法
  2. C语言实现双人五子棋
  3. 实现网站流量统计(监控网站流量)
  4. 用uni-app制作首页幻灯片
  5. 机器学习-29-Pointer Network(指针网络)
  6. 中国有句俗语叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,即打鱼三天,然后再晒网两天。问这个人在以后的某一天中是在打鱼还是在晒网
  7. MyExcel 3.6.0 版本发布,支持列表模板混合导出
  8. GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(三)
  9. Cookie和Session的使用及其案例分析
  10. 腾达无线路由器怎么建立服务器,腾达无线路由器网关和域名服务器