数组扁平化

112 阅读1分钟

数组扁平化概念

数组扁平化是指将一个多维数组变为一维数组

实现

reduce

遍历数组每一项,若值为数组则递归遍历,否则concat。

let arr = [1,2,[3,4,[5,6,[7,8]]]];
function flatten(arr) {  
    return arr.reduce((result, item)=> {
        return result.concat(Array.isArray(item) ? flatten(item) : item);
    }, []);
}
console.log(flatten(arr));// [1, 2, 3, 4, 5, 6, 7, 8]

二维数组

// 二维数组
let arr = [1,2,[3,4],[5,6]];
function arrFun(arr) {
    return [].concat(...arr);
}
console.log(arrFun(arr));// [1, 2, 3, 4, 5, 6]

多维数组

// 多维数组
let arr = [1,2,[3,4,[5,6,[7,8]]]];
function arrFun(arr) {
    let res = [];
    for (let i = 0,len=arr.length; i < len; i++) {
        if ( Array.isArray(arr[i]) ) {
            res = res.concat(arrFun(arr[i]));
        }else{
            res.push(arr[i]);
        }
    }
    return res;
}
console.log(arrFun(arr));// [1, 2, 3, 4, 5, 6, 7, 8]

toString & split

调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组

因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型

let arr = [1,2,[3,4,[5,6,[7,8]]]];
let sarr = arr.toString().split(',');
// ["1", "2", "3", "4", "5", "6", "7", "8"]

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

console.log(flatten(arr));
// [1, 2, 3, 4, 5, 6, 7, 8]

join & split

和上面的toString一样,join也可以将数组转换为字符串

function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}