使用flat()和flatMap来打平数组吧

简介: # 引言往往在开发中我们可能会遇到一些不平铺的,结构或是嵌套比较复杂的数组数据,那么我们面对这种数据的时候应该怎么优雅高效的处理他们的,今天让我们来学习一下使用flat()和flatMap来打平数组吧# 使用flat()和flatMap来打平数组吧今天我们来一起学习一下使用flat()和flatMap打平数组在ES2019中,flat()方法用于创建并返回一个新数组,这个新数组包含于他调用flat()的数组相同的元素,只不过其中任何本身也是数组的元素会被打平填充到返回的数组中。例如:```[1,[2,3]].flat() //会变成[1,2,3][1,[2,[3]]].

引言

往往在开发中我们可能会遇到一些不平铺的,结构或是嵌套比较复杂的数组数据,那么我们面对这种数据的时候应该怎么优雅高效的处理他们的,今天让我们来学习一下使用flat()和flatMap来打平数组吧

使用flat()和flatMap来打平数组吧

今天我们来一起学习一下使用flat()和flatMap打平数组

在ES2019中,flat()方法用于创建并返回一个新数组,这个新数组包含于他调用flat()的数组相同的元素,只不过其中任何本身也是数组的元素会被打平填充到返回的数组中。例如:

[1,[2,3]].flat() //会变成[1,2,3]
[1,[2,[3]]].flat() //会变成[1,2,[3]]

在不传参调用的时候,flat()会打平一级嵌套,原始数组中本身也是数组的元素会被打平,但是打平后的元素如果还是在数组中则不会再打平。如果想打平更多层级,需要给flat()传一个数值参数:

let a = [1,[2,[3,[4]]]];
a.flat(1) // [1,2,[3,[4]]]
a.flat(2) // [1,2,3,[4]]
a.flat(3) // [1,2,3,4]
a.flat(4) // [1,2,3,4]

flatMap()方法于map()方法相似,只不过返回的数组会自动被打平,就像传给了flat()一样。换句话说,调用a.flatMap(f)等同于但是效率远高于a.map(f).flat():

let phrases = ["hello world","balabala"];
let words = phrases.flatMap(phrase => phrase.split(" ");
console.log(words) // ["hello",world","balabala"];

可以把flatMap()想象为一个通用版的map(),可以把输入数组的一个元素映射为输出数组中的多个元素,特别地,flatMap()允许把输入元素映射为空数组,这样大屏后并不会有元素出现在数组中:

// 将非负数映射为他的平方根
[-2,-1,1,2].flatMap(x => x < 0 ? [] : Math.sqrt(x))
// 结果: [1,2**0.5]
相关文章
|
8月前
|
编译器 C# 索引
元祖Tuple
`Tuple`和`ValueTuple`是.NET中的元组类型,`ValueTuple`是值类型,结构体,成员为可修改的字段,而`Tuple`是引用类型,成员为只读属性。微软推荐使用`ValueTuple`,因其性能更优并有语法支持,如简化的声明`(Type, Type,...)`,值相等比较,元素命名和解构赋值。元组常用于方法返回多个值。
|
8月前
lambda中sorted排序
lambda中sorted排序
|
8月前
使用Lamda表达式、stream流遍历Map、list
使用Lamda表达式、stream流遍历Map、list
128 0
ES6系列笔记-数组方法reduce和forEach
ES6系列笔记-数组方法reduce和forEach
57 1
RxSwift操作符操作符map、flatMap、flatMapLatest、filter的使用与区别
RxSwift操作符操作符map、flatMap、flatMapLatest、filter的使用与区别
422 1
|
C++
C++17使用std::apply和fold expression对tuple进行遍历
C++17使用std::apply和fold expression对std::tuple进行遍历
129 0
关于数组中forEach() 、map()、filter()、reduce()、some()、every()的总结
关于数组中forEach() 、map()、filter()、reduce()、some()、every()的总结
61 0
ES6常用数组方法总结(max,contant,some,every,filter,reduce,forEach,map)
1.求最大值(Math.max) 2.数组添加到另外一个数组的尾部(...扩展符) 3.复制数组 3.1数组直接赋值 3.2 es5通过concat方法进行克隆,不会影响原来数组 3.3 es6通过扩展字符串来实现克隆 4.用Object.keys清空对象的属性值 5.forEach,遍历数组,无返回值,不改变原数组 6.map遍历数组,返回新数组,不改变原数组 7.filter,过滤掉数组不符合条件的值,返回新数组,不改变原数组 8.reduce 9 some() 10.every
185 0
ES6常用数组方法总结(max,contant,some,every,filter,reduce,forEach,map)
|
索引
Array.prototype.flatMap()
Array.prototype.flatMap()
97 0