数组扁平化(拉平)

今天看到一篇文章是处理数组扁平化的三种方式,试了一下,发现了一些特殊情况,特此记录

一、 递归方式

var arr1 = [1, 2, [33, 44], [55, [666, 777]]]
    var arr2 = []
    function arrFun(arr) {
      for (let i = 0; i < arr.length; i++) {
        if (arr[i].length && arr[i].length > 1) {
          arrFun(arr[i])
        } else {
          arr2.push(arr[i])
        }
      }
    }
    arrFun(arr1)
    console.log(arr2, 'arr2') // [1, 2, 33, 44, 55, 666, 777] 'arr2'

如果处理   [1, 2, [33, 44], [55, [666, 777]]],这种数组是可以的,但是以下两种情况是不能达到期望的

当我们使用  arr[i].length > 1 时,分两种情况

(1)arr1中是否含有 只有一个元素的数组

var arr1 = [[8], 1, 2, [33, 44], [55, [666, 777]]]

注意arr1中是否含有 只有一个元素的数组,例如 [8],这种情况下,arr[i].length也是等于1的,所以会直接将 [8]放入arr2中,结果:

[[8], 1, 2, 33, 44, 55, 666, 777] 'arr2'

(2)arr1中是否有元素含有length > 1 的字符串

var arr1 = [ '88888', 1, 2, [33, 44], [55, [666, 777]]]

注意:arr1中是否有元素含有length > 1 的字符串,例如:‘88888’  这种情况下,会将该字符串拆解,结果:

['8', '8', '8', '8', '8', 1, 2, 33, 44, 55, 666, 777] 'arr2'

二、使用toString()

使用toString会将数组转化为字符串,先看代码:

var arr1 = [1, 2, [33, 44], [55, [666, 777]]]
var arr2 = arr1.toString()
console.log(arr2, 'arr2') // 1,2,33,44,55,666,777 arr2

我们将转化结果放进数组中, 可以发现,这些元素都已经变成了字符串类型

var arr1 = [1, 2, [33, 44], [55, [666, 777]]]
var arr2 = arr1.toString().split(',')
console.log(arr2, 'arr2') // ['1', '2', '33', '44', '55', '666', '777'] 'arr2'

三、使用flat(推荐)

flat(index),参数index表示要拉平的层数,默认一层

flat() 默认情况下:

var arr1 = [1, 2, [33, 44], [55, [666, 777]]]
var arr2 = arr1.flat()
console.log(arr2, 'arr2') // [1, 2, 33, 44, 55, [666, 777]]

flat(1):

var arr1 = [1, 2, [33, 44], [55, [666, 777]]]
var arr2 = arr1.flat(2)
console.log(arr2, 'arr2') // [1, 2, 33, 44, 55, 666, 777] 'arr2'

猜你喜欢

转载自blog.csdn.net/qq_46372045/article/details/128332105