js数组的扁平化

数组扁平化

const a = [[1], [3, [4, 5, [6, 7]]], [8], [9, [2, 10]]]

方法1:递归

循环数组元素,若是仍是一个数组,就递归调用该方法数组

function flatten1(arr){
    let res = [];
    for(var i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            res = res.concat(flatten1(arr[i]));
        } else {
            //注意concat 和push 方法的返回值不一样
            //res=res.concat(arr[i]);
            res.push(ary[i])
        }
    }
    return res;
}

方法2:

使用reduce来简化方法1的代码:函数

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

方法3:

toString方法转成字符串,split方法把字符串切割成数组,字符串拼接方法code

function flatten3(arr){
    return arr.toString().split(',').map(item=> +item)
}

方法4:

some则当其中一个返回true,则最终结果为true, 至关于逻辑运算符||。递归

function flatten4(arr){
    while(arr.some(item => Array.isArray(item))){
        arr = [].concat(...arr);
    }
    return arr;
}

方法5:

every方法表示当数组每一个元素在断定函数中都返回true,则最终结果为true,至关于逻辑运算符 &&字符串

function flatten5(arr) {
    while (!arr.every(item => typeof item === 'number' && !isNaN(item))) {
        arr = [].concat(...arr);
        console.log(arr);
    }
    return arr;
}
console.log(...a)
相关文章
相关标签/搜索