- 在處理資料的時候,經常需要對資料進行過濾和遍歷,以便把資料轉換成符合我們要求的格式,比如下面的場景:
過濾掉名字為空的資料,如果年齡小於18,設定disabled: true
,大於等於18,設定disabled: false
// 原始資料
[{name: '小明', age: 15}, {name: '張三', age: 18}, {name: '李四', age: 20}, {name: '', age: 30}]
// 轉換後資料
[{name: '小明', age: 15, disabled: true}, {name: '張三', age: 18, disabled: false}, {name: '李四', age: 20, disabled: false}]
- 對於大多數開發者來說,首先能想到的方法應該是filter和map。
[{name: '小明', age: 15}, {name: '張三', age: 18}, {name: '李四', age: 20}, {name: '', age: 30}].filter(item => item.name).map(item => ({...item, disabled: item.age >= 18 ? false : true}))
雖然這種方式要遍歷兩次,不過個人覺得還算簡單,那能不能遍歷一次就能解決呢。顯然是可以的,使用Array.flatMap()
[{name: '小明', age: 15}, {name: '張三', age: 18}, {name: '李四', age: 20}, {name: '', age: 30}].flatMap(item => item.name ? [{...item, disabled: item.age >= 18 ? false : true}] : [])
flatMap
更像是map和filter的結合體,但flatMap的功能更強大一些,它讓我們可以更細微的運算元組中的每一項,比如:
const arr = [1,3].flatMap(number => {
return [number, 2 * number, 3 * number];
})
// [1, 2, 3, 3, 6, 9]
flatMap
的工作方式很簡單,他會對陣列中的每一項進行一次扁平化處理,因此示例返回的等價於[...[1,2,3], ...[3,6,9]]
。如果要拍平一個二維陣列,可以直接使用[[2,3],4].flatMap(item => item)
,當然拍平陣列最簡單的方式是用[[2,3],4].flat(Infinity)
。
如何高效的處理陣列對映首發於聚享小站,如果對您有幫助,不要忘記點贊支援一下呦?