flat、flatmap与map的用法区别

简介: 本文介绍了 JavaScript 数组方法 `flat()`、`flatMap()` 和 `map()` 的用法及区别。`flat()` 可按指定深度递归展平数组,参数为深度,默认一层;`flatMap()` 结合了 `map()` 和 `flat()` 功能,返回一维数组,长度可能不同于原数组;而 `map()` 返回与原数组长度一致的新数组。通过多个代码示例展示了三者的功能和差异,帮助开发者更好地理解和使用这些方法。

flat、flatmap()、map()

三者都是数组的方法,用法和区别详见下文

flat(num)

flat 方法会按照一个指定的递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返参数为深度 是一个数字回参数为深度 是一个数字

js

代码解读

复制代码

        const arr = [1, 2, [3, 4]]
        arr.flat()  // [1, 2, 3, 4]

        const arr1 = [1, 2, [3, 4, [5, 6]]]
        arr1.flat()  // [1, 2, 3, 4, [5, 6]]

flat(),会默认递归遍历一层,将其展开,以一个新的数组返回。可以看到在没有传参的情况下,第二个例子并没有完全展开。

js

代码解读

复制代码

        const arr2 = [1, 2, [3, 4, [5, 6]]]
        arr2.flat(2)  // [1, 2, 3, 4, 5, 6]

上面的例子中,数组中又存在 两层 的嵌套数组,故传递一个参数 2,即可将该数组展开

js

代码解读

复制代码

        const arr3 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
        arr3.flat(Infinity)  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

上面的例子中,数组中存在 四层 的嵌套数组,传递Infinity(表示无限),无论数组中嵌套了多少层,都可以将其展开为一维数组

js

代码解读

复制代码

        const arr4 = [1, 2, , 4, 5];
        console.log(arr4); // [1, 2, empty, 4, 5]
        console.log(arr4.flat());  // [1, 2, 4, 5]

还有一点,flat方法会移除数组中的空项

flatMap(callback,thisArg)

js

代码解读

复制代码

    let arr1 = ["it's Sunny in", "", "California"];

    arr1.map(x => x.split(" "));
    // [["it's","Sunny","in"],[""],["California"]]

    arr1.flatMap(x => x.split(" "));
    // ["it's","Sunny","in", "", "California"]

js

代码解读

复制代码

        const arr1 = [1,2,3,4,5]
        const result1 = arr1.map((i,index,arr)=>{
            if(i>2) {
                return i
            }
        })
        console.log(result1); //[undefined, undefined, 3, 4, 5]

        const result2 = arr1.flatMap((i,idnex,arr)=>{
            return i>2?[i]:[]
        })
        console.log(result2); //[3, 4, 5]

上面的例子中可以看出 flatmap() 与 map()的区别:

不同点:1- flatmap较map少嵌套了一层 [] ,2- map是必须会映射一个与原数组长度一致的新数组,而flatmap不一定与原数组长度一致

相同点:两者都返回一个新数组,不影响原数组。且都需要return


转载来源:https://juejin.cn/post/7152346248451178503


相关文章
|
6月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
135 3
【C++】map、set基本用法
|
7月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
7月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
102 1
WK
|
8月前
|
Python
map和filter的区别是什么
`map()`和`filter()`均为Python中的高阶函数,前者针对可迭代对象中的每个元素执行指定操作,如数值翻倍或字符串转大写;后者则筛选出符合条件的元素,例如仅保留偶数或非空字符串。两者均返回迭代器,并可通过`list()`等函数转换为所需的数据结构。具体使用时,应依据实际需求和场景选择合适的函数。
WK
76 1
WK
|
8月前
map和filter的区别是什么
在编程中,`map` 和 `filter` 是处理数组或集合时常用的两个函数。`map` 用于将每个元素通过指定函数转换后生成新的数组,而 `filter` 则根据条件筛选出符合条件的元素组成新数组。两者的主要区别在于:`map` 的返回数组长度与原数组相同,但元素被转换;`filter` 的返回数组长度可能不同,只包含符合条件的元素。
WK
138 2
|
8月前
数组方法中的`forEach()`方法和`map()`方法有什么区别?
数组方法中的`forEach()`方法和`map()`方法有什么区别?
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
8月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
8月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
9月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set