<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JavaScript數(shù)組反轉(zhuǎn)教程

          共 3316字,需瀏覽 7分鐘

           ·

          2021-02-13 14:36


          在工作面試和編碼測(cè)試中,反轉(zhuǎn)具有特定限制的數(shù)組是最常見(jiàn)的挑戰(zhàn)之一。

          本教程將向您展示在JavaScript中使用和不使用 reverse 方法來(lái)反轉(zhuǎn)數(shù)組的五種方法,以及可以使用的代碼段。

          如何使用Reverse方法反轉(zhuǎn)JavaScript中的數(shù)組

          當(dāng)需要在JavaScript中反轉(zhuǎn)數(shù)組時(shí),可以使用 reverse 方法,該方法將最后一個(gè)元素放在第一位,而第一個(gè)元素放在最后:

          let numbers = [1, 2, 3, 4, 5];
          let reversedNumbers = numbers.reverse();

          console.log(reversedNumbers);
          // [5, 4, 3, 2, 1]

          但是請(qǐng)記住,reverse 方法也會(huì)修改原始數(shù)組:

          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]

          一些編碼挑戰(zhàn)可能希望您保留原始數(shù)組,因此讓我們看一下如何在不更改原始數(shù)組的情況下反轉(zhuǎn)數(shù)組。

          如何使用Spread運(yùn)算符反轉(zhuǎn)JavaScript中的數(shù)組

          你可以結(jié)合使用擴(kuò)展運(yùn)算符(Spread)和 reverse 方法來(lái)反轉(zhuǎn)數(shù)組,而無(wú)需更改原始數(shù)組。

          首先,通過(guò)用方括號(hào) [] 括住spread語(yǔ)法,將spread運(yùn)算符返回的元素放入新數(shù)組中:

          [...numbers]

          然后,你在數(shù)組上調(diào)用 reverse 方法。這樣,將在新數(shù)組而不是原始數(shù)組上執(zhí)行 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語(yǔ)法,當(dāng)你需要支持較舊的瀏覽器或要使用ES5語(yǔ)法時(shí),可以結(jié)合使用 slicereverse 方法。讓我們現(xiàn)在來(lái)看。

          如何使用Slice和Reverse方法反轉(zhuǎn)JavaScript中的數(shù)組

          slice 方法用于將所選元素作為新數(shù)組返回,當(dāng)你調(diào)用不帶任何參數(shù)的方法時(shí),它將返回一個(gè)與原始數(shù)組相同的新數(shù)組(從第一個(gè)元素到最后一個(gè)元素)。

          接下來(lái),你在新返回的數(shù)組上調(diào)用 reverse 方法,這就是為什么原始數(shù)組不反轉(zhuǎn)的原因:

          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]

          如何在沒(méi)有Reverse方法的情況下在JavaScript中反轉(zhuǎn)數(shù)組

          有時(shí)面試會(huì)挑戰(zhàn)你對(duì)數(shù)組進(jìn)行逆向操作,而不采用 reverse 方法。沒(méi)問(wèn)題!你可以使用 for 循環(huán)和數(shù)組 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編寫(xiě)自己的反轉(zhuǎn)函數(shù)

          最后,假設(shè)你的任務(wù)是編寫(xiě)自己的反轉(zhuǎn)函數(shù),該函數(shù)需要在不創(chuàng)建副本的情況下反轉(zhuǎn)數(shù)組。乍一看,這似乎很復(fù)雜,但是不用擔(dān)心,因?yàn)樗鼘?shí)際上很簡(jiǎn)單。

          在這里你需要做的是交換數(shù)組的第一個(gè)和最后一個(gè)元素,然后交換第二個(gè)和倒數(shù)第二個(gè)元素,依此類(lèi)推,直到交換了所有元素。

          讓我們編寫(xiě)一個(gè)函數(shù)來(lái)做到這一點(diǎn)。

          編寫(xiě)函數(shù) customReverse,并使用 array.length - 1 作為變量,同時(shí)存儲(chǔ)第一個(gè)索引為 0 和最后一個(gè)索引。

          function customReverse(originalArray) {
          let leftIndex = 0;
          let rightIndex = originalArray.length - 1;
          }

          接下來(lái),創(chuàng)建一個(gè) while 循環(huán),只要 leftIndex 小于 rightIndex,它就會(huì)運(yùn)行。

          在此循環(huán)內(nèi),交換 leftIndexrightIndex 的值,你可以將值之一臨時(shí)存儲(chǔ)在臨時(shí)變量中:

          while (leftIndex < rightIndex) {
          // 交換元素
          let temp = originalArray[leftIndex];
          originalArray[leftIndex] = originalArray[rightIndex];
          originalArray[rightIndex] = temp;
          }

          最后,將 leftIndex 向上移動(dòng),將 rightIndex 向下移動(dòng),當(dāng) while 循環(huán)重復(fù)時(shí),它將交換倒數(shù)第二個(gè)元素,依此類(lèi)推:

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

          當(dāng)沒(méi)有其他要反轉(zhuǎn)的元素時(shí),循環(huán)將立即停止。對(duì)于奇數(shù)的數(shù)組 leftIndexrightIndex 的值會(huì)相等,所以不用再交換。對(duì)于偶數(shù)的數(shù)組 leftIndex 將大于 rightIndex

          你可以測(cè)試該功能以查看其是否正常工作,如下所示:

          let myArray = [1, 2, 3, 4, 5];

          customReverse(myArray);

          console.log(myArray);

          // output is [5, 4, 3, 2, 1]

          結(jié)束

          恭喜你!你不僅學(xué)會(huì)了如何在JavaScript中反轉(zhuǎn)數(shù)組,還學(xué)會(huì)了如何編寫(xiě)自己的反向函數(shù)。


          粉絲福利

          臨走前留下,今天的福利
          • 福利1:高清PDF《JavaScript高級(jí)程序設(shè)計(jì)(第4版).pdf》獲取資源請(qǐng)?jiān)诠娞?hào)對(duì)話框中回復(fù)關(guān)鍵字:FL05,如果沒(méi)有關(guān)注請(qǐng)掃下面的二維碼。更多福利資料請(qǐng)查看公眾號(hào)菜單
          • 福利2:在看+留言,我隨機(jī)抽取一位認(rèn)真留言的小伙伴,給他發(fā)一個(gè)紅包獎(jiǎng)勵(lì)

          最近文章


          -?END -

          點(diǎn)贊 + 在看 + 留言,下一個(gè)幸運(yùn)兒就是你!
          走心的分享更容易被抽中~

          開(kāi)獎(jiǎng)時(shí)間?下期文末

          瀏覽 116
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草原网站在线观看 | 人人操狠狠撸 | 日韩欧美成人在线 | 日韩一级黄色免费电影网站 | 成人淫色视频在线观看 |