实现数组扁平化(七种方式)

数组扁平化就是把多维数组转为一维数组
比如

[1, [2,3,3],3,[1, [2,3,8]],8] 转为[1,2,3,3,3,1,2,3,8,8]

1.[].concat(…arr)

        var msg = [1, [2,3,3],3,[1, [2,3,8]],8]
        function flatten(arr) {
           while(arr.some(item => Array.isArray(item))) {
               arr = [].concat(...arr)
           }
           return arr
        }
        console.log(flatten(msg))

2.reduce

var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
       function flatten(arr1) {
           return arr1.reduce((pre,cur,index)=> {
              return pre.concat(Array.isArray(cur)? flatten(cur): cur)
           },[])
       }
       console.log(flatten(arr))
       //判断是不是数组,如果是数组,就递归,不是就直接取当前的值

3. toString & split & .map[Number]

var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
       function flatten(arr1) {
           return arr1.toString().split(",").map(Number)
       }
       console.log(flatten(arr))
       //转为字符串 再切割成数组 
       //.map[Number] 是把["1", "2"]转为[1, 2]
       //.map[String] 是把[1, 2]转为["1", "2"]

4.join & split & map[Number]

var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
       function flatten(arr1) {
           console.log(arr1.join().split(",").map(Number))
        //    return arr1.toString().split(",").map(Number)
       }
       console.log(flatten(arr))
       //.map[Number] 是把["1", "2"]转为[1, 2]
       //.map[String] 是把[1, 2]转为["1", "2"]

5.map & 递归

var arr = [1, [2,3,3],3,[1, [2,3,8]],8]
       function flatten(arr1) {
           var result = []
           arr1.map(item => {
               Array.isArray(item) ?  result = result.concat(flatten(item)) : result.push(item)
            })
            return result    
       }
       console.log(flatten(arr))

6.toString().split(’,’),然后map,然后Number(item)

//
        var s1 = [1, [2,3,3],3,[1, [2,3,8]],8]
        function flatten(arr) {
            return arr.toString().split(',').map(item => Number(item))
        }
        console.log(flatten(s1))

7.ES6中的flat(Infinity) 拉平多维数组

//
        const arr = [1, 2, 3, [4, 5, 6,[7]]]
        console.log(arr.flat(Infinity)) //[1, 2, 3, 4, 5, 6, 7]
        //ES6中的flat() 拉平多维数组,Infinity是关键字,不管多少层 都可以拉平
        //flat(n)里面如果是数字的话,就拉平n层

总结

就是判断子元素是不是数组,如果是数组,就再次递归,如果不是,就直接Push就可以啦

参考这位大佬的,代码我自己写的
https://www.cnblogs.com/wind-lanyan/p/9044130.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值