JavaScript中的Array.flatMap你知道吗?

20 篇文章 0 订阅
2 篇文章 0 订阅

在这里插入图片描述

在我以前眼里JavaScript扁平一个数组,还是有些复杂的,不过在ES2019中引入了一种使数组扁平的新方法。并且有一个depth参数,您可以传入任何级别的嵌套。真令人开心🤩

const nested = [ ['📦', '📦'], ['📦']];

const flattened = nested.flat();

console.log(flattened);
//输出结果为: ['📦', '📦', '📦']

设定depth参数

语法是这样的:

array.flat(<depth>);

默认情况下,flat()将只展平一层深度。换句话说,depth是1。

array.flat();

// Same as

array.flat(1);

更深层的嵌套数组

很棒的是,此方法也可以在1级以上的深度下工作。您只需设置适当的depth参数即可展平更深的嵌套数组。

const twoLevelsDeep = [[1, [2, 2], 1]];

// depth = 1
twoLevelsDeep.flat()
//输出结果 [1, [2, 2], 1]

// depth = 2
twoLevelsDeep.flat(2)
//输出结果 [1, 2, 2, 1]

无限嵌套数组

假设您想无限深入。没问题,我们也可以这样做。使用Infinity

Infinity 属性用于存放表示正无穷大的数值。

const veryDeep = [[1, [2, 2, [3,[4,[5,[6]]]]], 1]];

veryDeep.flat(Infinity);
//输出结果 [1, 2, 2, 3, 4, 5, 6, 1]

flat()

另一个很炫酷的事情是,flat()是删除队列中的空值,像这样的

const missingNumbers = [1, ,3, ,5];

missingNumbers.flat();
//输出结果 [1, 3, 5];

是不是很炫酷,是不是学到了新知识

浏览器支持情况

flatES2019中引入的一项超级新功能,因此请不要使用Internet ExplorerEdge。相信大家其实都不想用😅

支持情况如下:

在这里插入图片描述

兼容方案

由于支持不是很好。这是一些替代解决方案。

  1. ES6解决方案

这是一个ES6解决方案。这仅适用于一级嵌套数组。

const oneLevelDeep =[[1, 2],[3]];

const flattened =[].concat(...oneLevelDeep);

//输出结果 [1, 2, 3,]
  1. 较旧的浏览器解决方案

这是旧版浏览器和ES6之前的版本。同样,这仅适用于一级嵌套数组。

const oneLevelDeep =[[1,2],[3]];

const flattened = [].concat.apply([],oneLevelDeep);

//输出结果 [1, 2, 3,]
  1. 递归

对于具有更深层嵌套的数组,可以使用递归。

const arr1 = [1,2,3,[1,2,3,4,[2,3,4]]];

function flattenDeep(arr1) {
   return arr1.reduce((acc, val) =>{
       return Array.isArray(val) ? 
       acc.concat(flattenDeep(val)) : 
       acc.concat(val), []
   } );
}

flattenDeep(arr1);
//输出结果 [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

最后

欢迎关注我

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值