目錄
map把數組“變個樣子”
filter挑出符合條件的數據
reduce把數組“合成一個結果”
實際組合使用的小例子
首頁 web前端 js教程 如何在JS中使用地圖,過濾和減少?

如何在JS中使用地圖,過濾和減少?

Jun 27, 2025 am 12:48 AM

JavaScript 中的map、filter 和reduce 方法分別用於改造數據、篩選數據和合併數據。 1.map 通過對數組每一項加工生成新數組,適用於格式轉換或提取字段;2.filter 通過條件篩選保留符合條件的數據,適合過濾無效內容或按條件搜索;3.reduce 將數組歸併為一個值,常用於求和、統計或分組。三者結合使用可高效處理複雜數據操作,提升代碼清晰度與簡潔性。

How to use map, filter, and reduce in js?

mapfilterreduce是JavaScript 中數組的三個非常常用的方法,它們能讓你更簡潔地處理數據。與其用一堆for循環和中間變量,不如用這幾個方法讓代碼更清晰。

How to use map, filter, and reduce in js?

下面分別講講它們怎麼用,以及在什麼場景下使用最合適。

How to use map, filter, and reduce in js?

map把數組“變個樣子”

map的作用是把一個數組裡的每一項都“加工”一遍,返回一個新的數組。它不會修改原數組,而是根據你提供的函數來生成新的值。

舉個例子:你想把一個數字數組都乘以2:

How to use map, filter, and reduce in js?
 const numbers = [1, 2, 3, 4];
const doubled = numbers.map(n => n * 2);
// 結果:[2, 4, 6, 8]

適用場景:

  • 把字符串轉成大寫或小寫
  • 從對像數組中提取某個字段組成新數組
  • 對每一項做格式化(比如時間、金額)

注意點:

  • 如果你在map裡返回的是undefined ,那新數組對應的位置就是空值。
  • 不要在這個函數里做副作用操作,比如發請求或者改DOM。

filter挑出符合條件的數據

顧名思義, filter就是用來“篩選”的。它會遍歷數組中的每一項,如果回調函數返回true ,就把這一項保留下來,否則就不保留。

比如,找出所有大於10的數:

 const nums = [5, 12, 8, 17];
const bigNums = nums.filter(n => n > 10);
// 結果:[12, 17]

常見用途:

  • 過濾掉無效數據(如null 或undefined)
  • 根據關鍵字搜索內容
  • 篩選狀態為“已完成”的任務等

技巧:

  • 可以結合includes做模糊匹配
  • 多條件過濾時可以用多個filter或者在裡面加邏輯判斷

reduce把數組“合成一個結果”

reduce的功能最強大,也最難理解。它可以將數組“歸併”成一個值,比如總和、最大值、對象分組等。

基本結構是:

 array.reduce((accumulator, currentValue) => { ... }, 初始值)

比如求和:

 const scores = [10, 20, 30];
const total = scores.reduce((sum, score) => sum score, 0);
// 結果:60

還能做什麼?

  • 統計出現次數(比如統計某個人出現了幾次)
  • 把數組轉成對象映射
  • 分組數據(比如按類型分類)

注意:

  • 初始值別忘了,不然容易出錯
  • 回調函數的第一個參數是你“累計”的結果,第二個是當前項

實際組合使用的小例子

假設你有一個訂單列表,你想找出總價超過100的訂單,併計算他們的總金額:

 const orders = [
  { id: 1, amount: 50 },
  { id: 2, amount: 120 },
  { id: 3, amount: 80 },
  { id: 4, amount: 200 }
];

const total = orders
  .filter(order => order.amount > 100)
  .map(order => order.amount)
  .reduce((sum, amount) => sum amount, 0);

// 結果:320

這種鍊式調用很常見,也很直觀。


基本上就這些。這三個方法各司其職:

  • map改造數據
  • filter篩選數據
  • reduce合併數據

掌握好它們,你會發現處理數組變得又快又乾淨。

以上是如何在JS中使用地圖,過濾和減少?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1535
276
高級JavaScript範圍和上下文 高級JavaScript範圍和上下文 Jul 24, 2025 am 12:42 AM

JavaScript的作用域決定變量可訪問範圍,分為全局、函數和塊級作用域;上下文決定this的指向,依賴函數調用方式。 1.作用域包括全局作用域(任何地方可訪問)、函數作用域(僅函數內有效)、塊級作用域(let和const在{}內有效)。 2.執行上下文包含變量對象、作用域鍊和this的值,this在普通函數指向全局或undefined,在方法調用指向調用對象,在構造函數指向新對象,也可用call/apply/bind顯式指定。 3.閉包是指函數訪問並記住外部作用域變量,常用於封裝和緩存,但可能引發

在JavaScript中探索類型的強制規則 在JavaScript中探索類型的強制規則 Jul 21, 2025 am 02:31 AM

類型強制轉換是JavaScript中自動將一種類型的值轉為另一種類型的行為,常見場景包括:1.使用 運算符時,若其中一邊為字符串,另一邊也會被轉為字符串,如'5' 5結果為"55";2.布爾上下文中非布爾值會被隱式轉為布爾類型,如空字符串、0、null、undefined等被視為false;3.null參與數值運算會轉為0,而undefined會轉為NaN;4.可通過顯式轉換函數如Number()、String()、Boolean()避免隱式轉換帶來的問題。掌握這些規則有助於

VUE 3組成API與選項API:詳細比較 VUE 3組成API與選項API:詳細比較 Jul 25, 2025 am 03:46 AM

Vue3中CompositionAPI更适合复杂逻辑和类型推导,OptionsAPI适合简单场景和初学者;1.OptionsAPI按data、methods等选项组织代码,结构清晰但复杂组件易碎片化;2.CompositionAPI用setup集中相关逻辑,利于维护和复用;3.CompositionAPI通过composable函数实现无冲突、可参数化的逻辑复用,优于mixin;4.CompositionAPI对TypeScript支持更好,类型推导更精准;5.两者性能和打包体积无显著差异;6.

掌握JavaScript並發模式:網絡工人與Java線程 掌握JavaScript並發模式:網絡工人與Java線程 Jul 25, 2025 am 04:31 AM

JavaScript的WebWorkers和JavaThreads在並發處理上有本質區別。 1.JavaScript採用單線程模型,WebWorkers是瀏覽器提供的獨立線程,適合執行不阻塞UI的耗時任務,但不能操作DOM;2.Java從語言層面支持真正的多線程,通過Thread類創建,適用於復雜並發邏輯和服務器端處理;3.WebWorkers使用postMessage()與主線程通信,安全隔離性強;Java線程可共享內存,需注意同步問題;4.WebWorkers更適合前端並行計算,如圖像處理,而

用node.js構建CLI工具 用node.js構建CLI工具 Jul 24, 2025 am 03:39 AM

初始化項目並創建package.json;2.創建帶shebang的入口腳本index.js;3.在package.json中通過bin字段註冊命令;4.使用yargs等庫解析命令行參數;5.用npmlink本地測試;6.添加幫助、版本和選項增強體驗;7.可選地通過npmpublish發布;8.可選地用yargs實現自動補全;最終通過合理結構和用戶體驗設計打造實用的CLI工具,完成自動化任務或分發小工具,以完整句⼦結束。

如何在JS中創建和附加元素? 如何在JS中創建和附加元素? Jul 25, 2025 am 03:56 AM

使用document.createElement()創建新元素;2.通過textContent、classList、setAttribute等方法自定義元素;3.使用appendChild()或更靈活的append()方法將元素添加到DOM中;4.可選地使用insertBefore()、before()等方法控制插入位置;完整流程為創建→自定義→添加,即可動態更新頁面內容。

在打字稿中的高級條件類型 在打字稿中的高級條件類型 Aug 04, 2025 am 06:32 AM

TypeScript的高級條件類型通過TextendsU?X:Y語法實現類型間的邏輯判斷,其核心能力體現在分佈式條件類型、infer類型推斷和復雜類型工具的構建。 1.條件類型在裸類型參數上具有分佈性,能自動對聯合類型拆分處理,如ToArray得到string[]|number[]。 2.利用分佈性可構建過濾與提取工具:Exclude通過TextendsU?never:T排除類型,Extract通過TextendsU?T:never提取共性,NonNullable過濾null/undefined。 3

微觀前端體系結構:實施指南 微觀前端體系結構:實施指南 Aug 02, 2025 am 08:01 AM

Microfrontendssolvescalingchallengesinlargeteamsbyenablingindependentdevelopmentanddeployment.1)Chooseanintegrationstrategy:useModuleFederationinWebpack5forruntimeloadingandtrueindependence,build-timeintegrationforsimplesetups,oriframes/webcomponents

See all articles