- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) >
- JavaScript中怎么實(shí)現數組反轉操作
JavaScript中怎么實(shí)現數組反轉操作,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細講解,有這方面需求的人可以來(lái)學(xué)習下,希望你能有所收獲。
如何使用Reverse方法反轉JavaScript中的數組
當需要在JavaScript中反轉數組時(shí),可以使用 reverse 方法,該方法將最后一個(gè)元素放在第一位,而第一個(gè)元素放在最后:
let numbers = [1, 2, 3, 4, 5]; let reversedNumbers = numbers.reverse(); console.log(reversedNumbers); // [5, 4, 3, 2, 1]
但是請記住,reverse 方法也會(huì )修改原始數組:
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 方法來(lái)反轉數組,而無(wú)需更改原始數組。
首先,通過(guò)用方括號 [] 括住spread語(yǔ)法,將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語(yǔ)法,當你需要支持較舊的瀏覽器或要使用ES5語(yǔ)法時(shí),可以結合使用 slice 和 reverse 方法。讓我們現在來(lái)看。
如何使用Slice和Reverse方法反轉JavaScript中的數組
slice 方法用于將所選元素作為新數組返回,當你調用不帶任何參數的方法時(shí),它將返回一個(gè)與原始數組相同的新數組(從第一個(gè)元素到最后一個(gè)元素)。
接下來(lái),你在新返回的數組上調用 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]
如何在沒(méi)有Reverse方法的情況下在JavaScript中反轉數組
有時(shí)面試會(huì )挑戰你對數組進(jìn)行逆向操作,而不采用 reverse 方法。沒(méi)問(wèn)題!你可以使用 for 循環(huán)和數組 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ě)自己的反轉函數
最后,假設你的任務(wù)是編寫(xiě)自己的反轉函數,該函數需要在不創(chuàng )建副本的情況下反轉數組。乍一看,這似乎很復雜,但是不用擔心,因為它實(shí)際上很簡(jiǎn)單。
在這里你需要做的是交換數組的第一個(gè)和最后一個(gè)元素,然后交換第二個(gè)和倒數第二個(gè)元素,依此類(lèi)推,直到交換了所有元素。
讓我們編寫(xiě)一個(gè)函數來(lái)做到這一點(diǎn)。
編寫(xiě)函數 customReverse,并使用 array.length - 1 作為變量,同時(shí)存儲第一個(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ì )運行。
在此循環(huán)內,交換 leftIndex 和 rightIndex 的值,你可以將值之一臨時(shí)存儲在臨時(shí)變量中:
while (leftIndex < rightIndex) { // 交換元素 let temp = originalArray[leftIndex]; originalArray[leftIndex] = originalArray[rightIndex]; originalArray[rightIndex] = temp; }
最后,將 leftIndex 向上移動(dòng),將 rightIndex 向下移動(dòng),當 while 循環(huán)重復時(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--; } }
當沒(méi)有其他要反轉的元素時(shí),循環(huán)將立即停止。對于奇數的數組 leftIndex 和 rightIndex 的值會(huì )相等,所以不用再交換。對于偶數的數組 leftIndex 將大于 rightIndex。
你可以測試該功能以查看其是否正常工作,如下所示:
let myArray = [1, 2, 3, 4, 5]; customReverse(myArray); console.log(myArray); // output is [5, 4, 3, 2, 1]
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2 建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站