array.flatMap():一個更智慧的 JavaScript 對映器
導讀 | array.map() 是一個非常有用的對映函式:它接收一個陣列和一個對映函式,然後返回一個新的對映陣列。 |
array.map() 是一個非常有用的對映函式:它接收一個陣列和一個對映函式,然後返回一個新的對映陣列。
然而,有一個替代 array.map()的方法:array.flatMap()(從ES2019開始可用)。這個方法給了我們對映的能力,但也可以在生成的對映陣列中刪除甚至新增新的專案。
有一個數字陣列,我們要如何建立一個新的陣列,使用每個數字加倍?
使用array.map()函式是一個好方法。
const numbers = [0, 3, 6]; const doubled = numbers.map(n => n * 2); console.log(doubled); // logs [0, 6, 12]
地址:
numbers.map(number => 2 * number) 將 number 陣列對映到一個新的陣列,其中每個數字都被翻倍。
對於需要一對一對映的情況,也就是說,對映後的陣列與原始陣列的項數相同,array.map()的效果非常好。
但如果我們需要將一個陣列的數字翻倍,同時跳為0的項,該怎麼辦?
直接使用 array.map() 是不可能的,因為該方法總是建立一個對映的陣列,其項數與原陣列相同。但是我們可以使用 array.map()和 array.filter() 的組合。
const numbers = [0, 3, 6]; const doubled = numbers .filter(n => n !== 0) .map(n => n * 2); console.log(doubled); // logs [6, 12]
事例地址:
array.map()和 array.filter() 可以解決問題,但有沒有更簡短的方法?
必須滴。使用 array.flatMap() 方法,只需呼叫一個方法就可以執行對映和刪除專案。
const numbers = [0, 3, 6]; const doubled = numbers.flatMap(number => { return number === 0 ? [] : [2 * number]; }); console.log(doubled); // logs [6, 12]
事例地址:
透過只使用 numbers.flatMap(),你可以將一個陣列對映到另一個陣列,但也可以從對映中跳過某些元素。
接著,我們來更詳細地看看 array.flatMap()是如何工作的。
array.flatMap() 函式接受一個回撥函式作為引數並返回一個新的對映陣列
const mappedArray = array.flatMap((item, index, origArray) => { // ... return [value1, value2, ..., valueN]; }[, thisArg]);
回撥函式在原陣列中的每個iteam上被呼叫,有3個引數:當前項、索引和原陣列。然後,回撥函式返回的陣列被扁平化了1層,得到的專案被新增到對映的陣列中。
此外,該方法還接受第二個可選引數,表示回撥內部的 this 值。
使用 array.flatmap()最簡單的方法是將包含專案的陣列扁平化
const arrays = [[2, 4], [6]]; const flatten = arrays.flatMap(item => item); console.log(flatten); // logs [2, 4, 6]
事例地址:
但是array.flatMap()除了簡單的扁平化之外,還可以做更多的事情。透過控制從回撥中返回的陣列項的數量:
透過返回一個空陣列從結果陣列中刪除該項
透過返回一個帶有一個新值的陣列 [newValue] 來修改對映的項
透過返回一個包含多個值的陣列來新增新項: [newValue1, newValue2, ...]
例如,正如你在上一節中所看到的,可以透過將專案加倍來建立一個新的陣列,但同時也要刪除 0。
const numbers = [0, 3, 6]; const doubled = numbers.flatMap(number => { return number === 0 ? [] : [2 * number]; }); console.log(doubled); // logs [6, 12]
現在,我們來看下它是怎麼工作的。
如果當前項為 0,回撥函式返回一個空陣列 []。這意味著當被扁平化時,空陣列[]沒有提供任何值。
如果當前迭代項非零,則返回 [2 * number]。當扁平[2 * number]陣列時,結果陣列中只新增2 * number。
你也可以使用 array.flatMap()來增加對映的陣列中的專案數量。
例如,下面的程式碼片段透過新增兩倍和三倍的數字將一個數字陣列對映到一個新陣列:
const numbers = [1, 4]; const trippled = numbers.flatMap(number => { return [number, 2 * number, 3 * number]; }); console.log(trippled); // logs [1, 2, 3, 4, 8, 12]
事例地址:
如果你想把一個陣列對映到一個新的陣列中,同時又能控制你想在新的對映陣列中新增多少項,那麼 array.flatMap() 方法就是一個好辦法。
array.flatMap(callback) 的回撥函式被呼叫,有3個引數:當前迭代的項、索引和原始陣列。然後,從回撥函式返回的陣列在1層深處被扁平化,得到的專案被插入到所產生的對映陣列中。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2856055/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 厲害了,一個更智慧的 JavaScript 對映器:array.flatMap()JavaScript
- hibernate物件對映的一個問題。物件
- ngrok將本機對映為一個外網的Web伺服器Web伺服器
- 機器人託管2.0,更智慧、更個性的AI客服機器人機器人AI
- MyBatis(四) 對映器配置(自動對映、resultMap手動對映、引數傳遞)MyBatis
- JavaScript Source Code對映引起的一個SAP C4C程式碼除錯問題JavaScriptC程式除錯
- Mybatis學習筆記(3)—高階對映之一對一對映MyBatis筆記
- .NET CORE AUTOMAPPER 對映一個類的子類APP
- Javascript - 物件對映automapper介紹JavaScript物件APP
- JavaScript 資料處理 - 對映表篇JavaScript
- 更智慧的JavaScript回撥函式解析JavaScript函式
- 請教一個關於hibernate對映oracle的問題Oracle
- Mybatis學習筆記(4)-高階對映之一對多對映MyBatis筆記
- MyBatis實現一對一關聯對映MyBatis
- EF:Fluent API 把一對多對映為一對一API
- MyBatis從入門到精通(九):MyBatis高階結果對映之一對一對映MyBatis
- 業務流程對映的10個技巧 - modernanalystNaN
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- 記憶體對映檔案詳解-----C++實現(即一塊記憶體和一個檔案相對映對應)記憶體C++
- AutoMapper在MVC中的運用04-string對映各種型別、一個屬性對映多個屬性等APPMVC型別
- Mybatis 強大的結果集對映器resultMapMyBatis
- Cisco的路由器上進行埠對映路由器
- 7 個流行的.Net開發ORM對映工具ORM
- hibernate(三) 一對多對映關係
- Spring整合Mybatis方式一 - 常規整合 - 註冊對映器SpringMyBatis
- 路由器埠對映設定方法路由器
- ElasticSearch中的對映Elasticsearch
- NDK java的對映Java
- 怎麼設定對映網路驅動器?在電腦上設定對映網路驅動器的方法
- 一個簡單的JavaScript模組載入器JavaScript
- 12位研究人員對更智慧機器的危險進行了辯論
- 基於JDBC寫一個和mybatis類似的對映框架—DBUtilsJDBCMyBatis框架
- 一個記憶體檔案對映使用者類 (轉)記憶體
- MyBatis從入門到精通(十一):MyBatis高階結果對映之一對多對映MyBatis
- Spring Data JPA 之 一對一,一對多,多對多 關係對映Spring
- 帶你玩轉 JavaScript ES6 (六) – Map 對映JavaScript
- 多重對映
- NAS對映網路驅動器如何操作?