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
- Javascript - 物件對映automapper介紹JavaScript物件APP
- ngrok將本機對映為一個外網的Web伺服器Web伺服器
- .NET CORE AUTOMAPPER 對映一個類的子類APP
- JavaScript Source Code對映引起的一個SAP C4C程式碼除錯問題JavaScriptC程式除錯
- 機器人託管2.0,更智慧、更個性的AI客服機器人機器人AI
- MyBatis(四) 對映器配置(自動對映、resultMap手動對映、引數傳遞)MyBatis
- JavaScript 資料處理 - 對映表篇JavaScript
- MyBatis實現一對一關聯對映MyBatis
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- 業務流程對映的10個技巧 - modernanalystNaN
- MyBatis從入門到精通(九):MyBatis高階結果對映之一對一對映MyBatis
- Spring整合Mybatis方式一 - 常規整合 - 註冊對映器SpringMyBatis
- 對映
- Mybatis 強大的結果集對映器resultMapMyBatis
- 一文讀懂Python中的對映Python
- ElasticSearch中的對映Elasticsearch
- Spring Data JPA 之 一對一,一對多,多對多 關係對映Spring
- 怎麼設定對映網路驅動器?在電腦上設定對映網路驅動器的方法
- [非專業翻譯] Mapster - 對映器
- 基於JDBC寫一個和mybatis類似的對映框架—DBUtilsJDBCMyBatis框架
- MyBatis從入門到精通(十一):MyBatis高階結果對映之一對多對映MyBatis
- 實現一個簡單的 JavaScript 編譯器JavaScript編譯
- 瞭解這12個概念,讓你的JavaScript水平更上一層樓JavaScript
- 多重對映
- NAS對映網路驅動器如何操作?
- 深入淺出MyBatis:「對映器」全瞭解MyBatis
- 『手寫Mybatis』實現對映器的註冊和使用MyBatis
- 如何在win10系統中對映網路驅動器_win10電腦對映網路驅動器的方法Win10
- Docker 網路基礎配置一(埠對映)Docker
- [非專業翻譯] Mapster - 對映前&對映後
- Cache與主存之間的直接對映,全相聯對映和組項聯對映以及其地址變換
- 用Python實現一個人工智慧對對聯Python人工智慧
- mybatis 同一張表的資料被對映到 一個結果物件例項 的 多個屬性物件 上MyBatis物件
- 如何最佳化產品設計,讓對話機器人更智慧?機器人
- nginx反向代理實現不同域名對映到同一臺伺服器的相同埠Nginx伺服器
- WSL 埠對映
- Cache對映方式