JavaScript >> Javascript 文檔 >  >> JavaScript

在 JavaScript 中反轉數組

在本教程中,我們將了解 如何在 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);
console.log(strArrReversed);

我們創建了兩個新變量來指向結果數組:

[ 5, 4, 3, 2, 1 ]
[ '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 .

函數反轉數組

函數式編程是一個美妙的 除了大多數命令 編程語言。函數式構造允許我們通過直觀和簡單的指令對對象和序列執行各種甚至是複雜的變革性操作。

許多開發人員只是喜歡在可能的情況下使用函數式構造,因此反轉數組通常也通過函數式構造完成也就不足為奇了。這種方法還允許您在反轉的同時進行另一個轉換,例如添加或更改元素。

為了在 JavaScript 中函數式地反轉數組,我們將利用擴展運算符和 map() 功能:

// Preserves original array
let numArrReversed = numArr.map(numArr.pop, [...numArr]);

// Doesn't preserve original array
let strArrReversed = [...strArr].map(strArr.pop, strArr);

map() 方法映射每個彈出 numArr 中的元素(刪除最後一個元素) 並將其推入一個新數組,該數組被創建為 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() 在數組開頭添加元素的方法,同時拼接 (就地操作)不斷:

免費電子書:Git Essentials

查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!

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

Tutorial JavaScript 教程
  1. Advent.js🎅🏼| #13:用星號包裹禮物

  2. Mern(MongoDB、Express JS、React JS 和 Node JS)堆棧

  3. 如何使用 Strapi v4 和 React Native 創建 Notes 應用

  4. 協作實驗室 TCL-44 回顧

  5. Web Components 是我們需要但不值得的英雄

  6. 如何設置 Vue 開發環境

  7. Alpine js 使用 Tailwind CSS 隱藏顯示密碼

  1. 如何在 AWS ECS 上部署 React + Nginx (FARGATE)

  2. 不確定如何在其中包含 Promise 的方法中填充數組

  3. 使用可用或不可用過濾器過濾對像數組

  4. 使用 Create React App 進行 A/B 測試

  5. 作為 HypeMail 的前端開發人員分配給我的任務。

  6. ⛴ 很容易在生產環境中部署 React 應用程序😎

  7. 創建您的第一個 Netlify 無服務器函數(視頻)

  1. Keycloakify:使用 React 創建 Keycloak 主題

  2. 使用 Typescript 和類創建 NuxtJs 項目

  3. 創建維和人員

  4. JavaScript SVG 圖編輯器 3.9 KB(開源庫)