day31---数组的扁平化

案例

案例一

let arr=[
    1,[2,9,[0,10]],3,[4,5,[6,7,8]]
]

// 由于是值的引用,所以新修改的数组,是会影响原来数组的
function cArr(arr,newarr=[]){
    arr.forEach(item=>{
        if(Array.isArray(item)){
            cArr(item,newarr)
            return 
        }
        newarr.push(item)
    })
    return newarr
}

let arr1=cArr(arr)
console.log(arr1);

另一种实现

let arr = [
    1, [2, 9, [0, 10]], 3, [4, 5, [6, 7, 8]]
]

function cfunc(data) {
    if (!Array.isArray(data)) {
        return data
    }

    let newarr = []
    data.forEach(item => {
        let data1 = cfunc(item)
        if (!Array.isArray(data1)) {
            newarr.push(data1)
            return
        }

        newarr = [...newarr, ...data1]
    })

    return newarr
}

console.log(cfunc(arr));

案例二

arr1.flat(Infinity)

案例三

let arr1=[1,2,3,[4,5,6,[7,8],[9]],10]
function flatten3(arr){
    let newarr=[...arr]
    // some 有一个满足的就会返回true
    while (newarr.some(item=>Array.isArray(item))){
        newarr=[].concat(...newarr)
    }

    return newarr
}

console.log(flatten3(arr1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值