js实现数组扁平化方法总结

数组扁平化:

将多维数组变为一维数组
arr = [1,2,[3,[4,5]]]
经扁平化处理后变为:
arr = [1,2,3,4,5]

1、arr.some+concat 实现数组扁平化

实现原理:some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
…arr(es6展开运算符):[1,2,[3,4]] => 1,2,[3,4]
核心:[ ].concat(1,2,[3,[4,5]]) => [1,2,3,[4,5]]

var arr = [1,2,[3,[4,5]]]

function flatten(arr) {
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
console.log(arr); //arr = [1,2,3,4,5]

2、toString+split+map 实现数组扁平化

实现原理:
var arr = [1,2,[3,[4,5]]]
arr.toString() => 1,2,3,4,5
arr.toString().split(’,’) => [“1”, “2”, “3”, “4”, “5”]
return arr.toString().split(’,’).map(item => Number(item)) => [1,2,3,4,5]
核心: Number(“1”) => 1


function flatten(arr) {
    return arr.toString().split(',').map(item => Number(item));
}

3、Array.prototype.flat()实现数组扁平化

实现原理:flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
核心:使用 Infinity,可展开任意深度的嵌套数组

function flatten(arr) {
    return arr.flat(Infinity);
}

4、map+递归 实现数组扁平化

实现原理:创建空数组res追加非数组元素,push前先判断元素是否为数组,是数组则递归扁平函数,非数组则push到res数组里面,最终返回res数组。

function flatten(arr) {
    var res = [];
    arr.map(function(item) {
        if (Array.isArray(item)) {
            res = res.concat(flatten3(item));
        } else {
            res = res.push(item);
        }
    })
    return res;
}

5、reduce+递归 实现数组扁平化

实现原理:借用reduce方法, 判断数组中还有数组的话,递归调用flatten扁平函数(利用reduce扁平), 再用concat连接,返回扁平后数组。
核心:掌握reduce实现原理 可查看我的另一篇文章:介绍reduce

function flatten(arr){
    return arr.reduce(function(prev, cur){
        return prev.concat(Array.isArray(cur) ? flatten(cur) : cur)
    },[])
}

flatten(arr)   // [1,2,3,4]

注:以上列举的是较为常见的方法,其他方法请自行查阅相关资料。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值