在日常开发中,我们经常需要对数组进行扁平化,以方便我们的开发,那么如何实现扁平化数组呢?首先我们来了解下数组扁平化的应用场景。数组扁平化一般发生在一些多维数组的应用中,因为操作多维数组比较麻烦。因此,将多维数组扁平化为一维数组后,会大大简化。对于我们对数组的操作,让我们在本节中学习6种方法来展平数组!思考先行首先,我们先带着问题来学习。问题如下:如何通过最常见的方法解决数组展平的问题?ES6中有没有一些高级方法可以直接展平数组?数组扁平化上面说了那么多,还没介绍呢。什么是数组展平?数组的扁平化实际上就是将多层嵌套的数组转化为只有一层的数组。我们可以看一个例子。代码如下:constarr=[1,[2,[3,4,5]]];//伪代码console.log(flatten(arr));//[1,2,3,4,5]在上面的代码中,我们使用flatten方法将多维数组转化为一维数组,这个方法就是对数组的展平,那么如何实现扁平化?下面我们来实现一下。普通递归实现循环递归,逐一遍历。如果数组中的每一项还是一个数组,则继续遍历。使用递归调用的方式实现数组中每一项的连接。我们看一下代码,如下://递归调用constarr=[1,[2,[3,4,5]]];constflatten=(arr)=>{让结果=[];for(leti=0;i{returnarr.reduce((prev,next)=>{returnprev.concat(Array.isArray(next)?flatten(next):next)},[]);};控制台日志(展平(arr));//[1,2,3,4,5]上面代码中,使用reduce遍历数组,依然判断每一项是否为数组。如果没有,则累加,否则继续执行flatten。其实思路和第一种递归是一样的,只是实现起来比较简单。扩展运算符在上面实现。我们使用reduce方法来实现数组的扁平化,那么有没有更简单的方法呢?答案是肯定的,那就是使用展开运算符来实现,我们来看看具体的实现代码,如下://展开运算符constarr=[1,[2,[3,4,5]]];constflatten=(arr)=>{while(arr.some(item=>Array.isArray(item))){arr=[].concat(...arr);}returnarr;};console.log(flatten(arr));//[1,2,3,4,5]上述方法中,通过while循环,判断每一项是否为数组,如果是,则执行while循环内的语句,并将展开运算符添加的每一项不是数组到数组,最后当while条件不为真时,说明数组中的每一项都已经被压扁了。以上三种实现数组扁平化的方式是最基本的思路,都是通过最常见的递归思路实现的。特别是前两个很相似。值得注意的是reduce方法,它可以在很多场景下实现。由于reduce方法提供的参数少,比较灵活,可以解决很多问题,是一个值得我们熟练掌握和熟练掌握的方法。那么除了以上三种方法之外,还有没有其他的实现思路呢?让我们继续。使用split和toString一起处理由于数组默认有一个toString方法,我们可以将数组转换成带逗号的字符串,然后使用数字的split方法对字符串进行拆分。具体代码如下:constarr=[1,[2,[3,4,5]]];constflatten=(arr)=>{returnarr.toString().split(',');};console.log(flatten(arr));//['1','2','3','4','5']将数组通过toString转换切割并拆分后,数组最终被压平,但数组中的数字变成了String,所以这个方法实际上是破坏性的,它会修改数组中的数据类型。除了通过toString和split处理数组外,ES6中的flat还可以直接使用ES6中新增的flat方法对数组进行展平。首先我们看一下flat的使用语法:arr.flat([depth]),其中depth表示数组可以展开的深度,即数组可以展开多少层。扩展层数由深度决定。如果是多层的,只需要传入Infinity,也就是说不管有多少层,都会被展开。让我们看看如何使用flat来展平数组。代码如下:constarr=[1,[2,[3,4,5]]];constflatten=(arr)=>{返回arr。平坦(无穷大)};安慰。日志(展平(arr));//[1,2,3,4,5]上面代码中,我们在flat里面设置的参数是Infinity,其实也可以传入一个3,所以数组的层数为3layers,所以flat的参数其实可以是数组本身的层数,如果我们不知道数组有多少层,那就用Infinity。使用正则和JSON的方法一起处理除了上面提到的方法,我们还可以通过正则和JSON中的stringify对数组进行扁平化处理。我们一起来看代码,如下:constarr=[1,[2,[3,4,5]]];constflatten=(arr)=>{让str=JSON.stringify(arr);str=str.replace(/(\[|\])/g,'');str='['+str+']';返回JSON.parse(str);};console.log(flatten(arr));//[1,2,3,4,5]在上面的代码中,我们先通过JSON.stringify将数组转为字符串,然后通过正则表达式过滤掉数组中的方括号,最后将通过JSON.parse方法将字符串替换为数组。上面已经实现了6中数组展平的方法,你能想到其他方案吗?最后,在本文中,我们学习了6种常用的扁平化数组方法。在实际开发中,我们可以利用本文提到的知识点,将多维数组转化为一维数组。更容易。当然在日常开发中是不可能存储数组的,有时候多层数组对象,那么遇到数组对象应该如何压平数组呢?这个问题你可以自己想想。学会这6个方法后,你就知道如何回答前两个问题了!作者:爱鱼的Z哥链接:https://juejin.cn/post/7137308369886380040来源:稀土掘金版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。