如何在JS中使用地圖,過濾和減少?
JavaScript 中的map、filter 和reduce 方法分別用於改造數據、篩選數據和合併數據。 1.map 通過對數組每一項加工生成新數組,適用於格式轉換或提取字段;2.filter 通過條件篩選保留符合條件的數據,適合過濾無效內容或按條件搜索;3.reduce 將數組歸併為一個值,常用於求和、統計或分組。三者結合使用可高效處理複雜數據操作,提升代碼清晰度與簡潔性。
map
、 filter
和reduce
是JavaScript 中數組的三個非常常用的方法,它們能讓你更簡潔地處理數據。與其用一堆for
循環和中間變量,不如用這幾個方法讓代碼更清晰。

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

用map
把數組“變個樣子”
map
的作用是把一個數組裡的每一項都“加工”一遍,返回一個新的數組。它不會修改原數組,而是根據你提供的函數來生成新的值。
舉個例子:你想把一個數字數組都乘以2:

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中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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