您的位置: 翼速应用 > 业内知识 > web前端 > 正文

教你如何在ES6中求数组反转

本文给大家带来了关于ES6的相关知识,教大家利用数组对象的reverse()方法来实现数组反转,该方法用于颠倒数组中元素的顺序,将最后一个元素放在第一位,而第一个元素放在最后,语法“array.reverse()”。reverse()方法会修改原始数组,如果不想修改需要配合扩展运算符“...”使用,语法“[...array].reverse()”。


教你如何在ES6中求数组反转


本文适用于windows7系统、ECMAScript 6版、Dell G3电脑。


教你如何在ES6中求数组反转


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


在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]


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


使用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,它就会运行。


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


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--;
  }
}


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


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


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


以上就是关于在ES6中求数组反转的全部教程分享,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题