【utils】数组扁平化

数组扁平化就是把多维数组转化成一维数组。

1、flat

arr.flat([depth]) 创建一个新的阵列的所有子阵元件连接到它递归到指定的深度。不改变原数组。【ES6】

在浏览器支持的情况下最好用这个。

        //var newArray = arr.flat([depth]);
        //depth : 深入水平
        var arr_ = ['a',['a','b',['c','d',['1','3']],'e'],'f',['g',['h']]];

        console.log(arr_.flat());
        //Array(8) [ "a", "a", "b", (3) […], "e", "f", "g", (1) […] ]

        console.log(arr_.flat(1));
        //Array(8) [ "a", "a", "b", (3) […], "e", "f", "g", (1) […] ]

        console.log(arr_.flat(2));
        //Array(10) [ "a", "a", "b", "c", "d", (2) […], "e", "f", "g", "h" ]
        
        console.log(arr_.flat(Infinity));
        //Array(11) [ "a", "a", "b", "c", "d", "1", "3", "e", "f", "g", … ]

2、reduce

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
  • total : 必需。初始值, 或者计算结束后的返回值。
  • currentValue : 必需。当前元素 。
  • currentIndex : 可选。当前元素的索引
  • arr : 可选。当前元素所属的数组对象。
  • initialValue : 可选。传递给函数的初始值.
  • 提供了initialValue 的值的时候,total为initialValue 的大小,currentValue为数组的第一个元素值
  • 没有提供initialValue 的值的时候,total为数组第一个元素的值,currentValue为第二个元素的值,此后每执行一次,total 为return的值。
        var arr_ = ['a',['a','b',['c','d',['1','3']],'e'],'f',['g',['h']]];
        //传递一个空数组,作为遍历开始
        var  flatting = arr => {
            return arr.reduce((pre, cur) => {
                return pre.concat(Array.isArray(cur) ? flatting(cur) : cur)
            },[])
        }
        flatting(arr_);
        

3、递归

        var arr_ = ['a',['a','b',['c','d',['1','3']],'e'],'f',['g',['h']]];
        var flatting = arr => {
            var nArr = [];
            for (var i = 0; i < arr.length; i++) {
                if(Array.isArray(arr[i])) {
                    nArr = nArr.concat(flatting(arr[i]));
                    flatting[arr[i]];
                } else {
                    nArr.push(arr[i]);
                }
                
            }
            return nArr;
        }
        console.log(flatting(arr_)); 

4、some

        var arr_ = ['a',['a','b',['c','d',['1','3']],'e'],'f',['g',['h']]];
        var flatting = arr => {
            while(arr.some(item => Array.isArray(item))) {
                arr = [].concat(...arr);
            }
            return arr;
        }
        console.log(flatting(arr_)); 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值