数组扁平化的实现

142 阅读1分钟
let arr = [1, [2, [3, [4, 5]]], 6];

// 方法1 arr.flat( Infinity ) 展开任意嵌套级别得数组, 也可以是 Number
let arr1 = arr.flat(Infinity);
console.log(arr1);

// 方法2 正则
let arrStr = JSON.stringify(arr);
let reg = /(\[|\])/g;
let arr2 = arrStr.replace(reg, "").split(",").map(Number);
console.log(arr2);

// 方法3:递归得方式
let arr3 = [];
function flat(arr) {
    arr.forEach((ele) => {
        if (ele instanceof Array) {
            flat(ele);
        } else {
            arr3.push(ele);
        }
    });
}
flat(arr);
console.log(arr3);

// 方法4:reduce 实现
function flat(arr) {
    return arr.reduce((temp, curr) => {
        return temp.concat(Array.isArray(curr) ? flat(curr) : curr);
    }, []);
}

console.log(flat(arr));

//方法5 ... 和concat
while (arr.some(Array.isArray)) {
    arr = [].concat(...arr);
}