JavaScript >> Javascript 文檔 >  >> JavaScript

如何在 JavaScript 中使用數組方法:迭代方法

本文最初是為 DigitalOcean 編寫的 .

簡介

在 JavaScript 中,數組數據類型由元素列表組成。 JavaScript 開發人員可以使用許多有用的內置方法來處理數組。修改原始數組的方法稱為 mutator 方法和返回新值或表示的方法稱為 訪問器 方法。

還有第三類數組方法,稱為迭代 方法,它們是對數組中的每一項進行操作的方法,一次一個。這些方法與循環密切相關。在本教程中,我們將重點介紹迭代方法。

為了充分利用本教程,您應該對數組的創建、索引、修改和循環有一定的了解,您可以在教程中了解 JavaScript 中的數組。

在本教程中,我們將使用迭代方法遍歷數組,對數組中的每個項執行函數,過濾數組的所需結果,將數組項減少為單個值,並在數組中搜索以查找值或索引。

理解箭頭函數

本教程中的許多示例將使用 JavaScript 箭頭函數表達式,由等號後跟大於號表示:=> .

一個函數 是可以執行的可重用代碼塊。傳統上,可以使用以下語法編寫函數:

var example = function () {
  // code to execute
}

example()

撰寫本文時最新版本的 JavaScript 允許使用箭頭函數,可以使用以下語法編寫:

var example = () => {
  // code to execute
}

example()

任何一種情況下的括號都可以包含參數。當只有一個參數時,括號可以省略,如:

var example = (parameter1) => {
  // code to execute
}

在本教程的所有示例中,我們將使用箭頭函數語法。要閱讀和了解更多關於 JavaScript 中的函數,請閱讀 Mozilla 開發者網絡上的函數參考。

forEach()

forEach() 方法為數組中的每個元素調用一個函數。

讓我們從分配給變量 fish 的以下數組開始 :

let fish = ['piranha', 'barracuda', 'cod', 'eel']

我們可以使用 forEach() 打印 fish 中的每個項目 數組到控制台。

// Print out each item in the array
fish.forEach((individualFish) => {
  console.log(individualFish)
})

完成後,我們將收到以下輸出:

piranha
barracuda
cod
eel

另一種方法是使用 for loop 關鍵字並針對數組的長度屬性對其進行測試。

// Loop through the length of the array
for (let i = 0; i < fish.length; i++) {
  console.log(fish[i])
}

上面的代碼將具有與使用 forEach() 相同的輸出 方法。作為專門用於數組的迭代方法,forEach() 對於這個特定的任務來說更加簡潔明了。

map()

map() 方法創建一個新數組,其中包含對數組中每個元素的函數調用結果。

舉例說明如何使用迭代方法map() ,我們可以將循環的每次迭代打印到控制台。 map() 不會改變原始數組,而是返回一個新的數組值。不同於 forEach() , map() 方法必須分配給一個新的變量。

let fish = ['piranha', 'barracuda', 'cod', 'eel']

// Print out each item in the array
let printFish = fish.map((individualFish) => {
  console.log(individualFish)
})

printFish
piranha
barracuda
cod
eel

我們也可以使用 map() 更改數組中每個項目的值。為了演示這一點,我們將添加一個 sfish 中每個項目的末尾 將每個單詞複數的數組。

// Pluralize all items in the fish array
let pluralFish = fish.map((individualFish) => {
  return `${individualFish}s`
})

pluralFish
[ 'piranhas', 'barracudas', 'cods', 'eels' ]

fish 變量不變,但 pluralFish 現在包含原始變量的修改版本。

filter()

filter() 方法創建一個新數組,其中包含通過給定測試結果的元素。

我們可以使用 filter() 返回一個新數組,該數組僅包含列表中以特定字母開頭的項目。為此,我們可以利用字符串索引來調用數組的每個字符串項中的第一項(或字母)。

let seaCreatures = ['shark', 'whale', 'squid', 'starfish', 'narwhal']

// Filter all creatures that start with "s" into a new list
let filteredList = seaCreatures.filter((creature) => {
  return creature[0] === 's'
})

filteredList
[ 'shark', 'squid', 'starfish' ]

我們測試了數組中的哪些項目具有 s0 索引,並將結果賦值給一個新的變量。

filter() 是一種迭代方式,不會對原數組進行變異。

reduce()

reduce() 方法會將數組縮減為單個值。

這在數字中很常見,例如求數組中所有數字的總和。

let numbers = [42, 23, 16, 15, 4, 8]

// Get the sum of all numerical values
let sum = numbers.reduce((a, b) => {
  return a + b
})

sum
108

reduce() 也可以與字符串和其他數據類型一起使用。 reduce() 返回的值 可以是數字、字符串、數組或其他數據類型。 reduce() 是一種不改變原始數組的迭代方法。

find()

find() 方法返回數組中通過給定測試的第一個值。

例如,我們將創建一個海洋生物數組。

let seaCreatures = ['whale', 'octopus', 'shark', 'cuttlefish', 'flounder']

然後我們將使用 find() 方法來測試數組中的任何生物是否是頭足類動物。

// Check if a given value is a cephalopod
const isCephalopod = (cephalopod) => {
  return ['cuttlefish', 'octopus'].includes(cephalopod)
}

seaCreatures.find(isCephalopod)
octopus

octopus 是數組中滿足 isCephalopod() 中測試的第一個條目 函數,它是第一個返回的值。

find() 方法可以幫助您處理包含許多值的數組。

findIndex()

findIndex() 方法返回數組中通過給定測試的第一個索引。

我們可以使用相同的 seaCreatures find() 中的示例 方法。

let seaCreatures = ['whale', 'octopus', 'shark', 'cuttlefish', 'flounder']

使用 isCephalopod 測試,我們會找到索引號而不是第一個匹配的值。

// Check if a given value is a cephalopod
const isCephalopod = (cephalopod) => {
  return ['cuttlefish', 'octopus'].includes(cephalopod)
}

seaCreatures.findIndex(isCephalopod)
1

octopus 是第一個匹配測試的項目,索引為 1 ,因此它是返回的索引號。如果測試不滿足,findIndex() 將返回 -1 .

這種方法在處理包含許多項的數組時特別有用。

結論

在本教程中,我們回顧了 JavaScript 中主要的內置迭代數組方法。迭代方法對數組中的每一項進行操作,並且經常執行新功能。我們學習瞭如何遍歷數組、改變數組中每一項的值、過濾和減少數組,以及查找值和索引。

要查看數組的基礎知識,請閱讀了解 JavaScript 中的數組。要查看所有數組方法的完整列表,請查看 Mozilla 開發者網絡上的數組參考。


Tutorial JavaScript 教程
  1. 混淆 ECMAScript 版本名稱致死

  2. 第 1 天在 Html/Css 和 Javascript 中

  3. 如何使用 Sass 為 KendoReact 組件添加自定義樣式

  4. React/Vue 組件只是性能較差的服務器端模板組件。改變主意。

  5. React 18 來了!什麼是新的?

  6. 📚Angular 面試問題第 2 部分

  7. 將 Storybook 部署到 GitHub Pages

  1. 5 種帶有 CSS 形狀和濾鏡的精美圖像效果

  2. 解決一頁內兩個 Mailchimp 內嵌訂閱表單的 bug

  3. 我是如何構建隔離項目的(感謝 Node.js 和 Deta Base)

  4. 所有級別的 JavaScript 練習練習

  5. 開源:Git 遠程和合併

  6. 使用 Volta 管理 Node.js

  7. 面向 JavaScript 開發人員的 CSS 動畫指南

  1. 分步大 O 複雜性分析指南,使用 Javascript

  2. 如何從 URL 中刪除 # 和 Angular 構建和 nodejs 應用程序中的 404 重新加載問題?

  3. 箭頭函數

  4. 使用 Apollo 的多種方式