6种方式实现数组扁平化

77 阅读1分钟

6中方式实现数组扁平化

概念:将一个多维数组变为一维数组

[1, [2, 3, [4, 5]]]  转变   [1, 2, 3, 4, 5]

1.flat

[1, [2, [3]]].flat(2)  // [1, 2, 3]
[1, [2, [3,[4,5,6]]]].flat(3)	//  [1, 2, 3, 4, 5, 6]

2.利用some+concat

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

3.递归

function flatten(arr) {
    var result = [];
    arr.map(item=>{
        if (Array.isArray(item)) {
            result = result.concat(flatten(arr[i]))
        } else {
            result.push(arr[i])
        }
    })
    return result;
}
flatten([1,2,[3,4,[5,6,7]]]) //[1, 2, 3, 4, 5, 6, 7]

4.reduce

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

5.toString+split

function flatten(arr) {
    return arr.toString().split(',').map(function(item) {
        return item;//根据需要进行处理
    })
}
flatten([1,2,[3,4,[5,'红色']]])//['1', '2', '3', '4', '5', '小红']

6.join +split

function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return item;//根据需要进行处理
    })
}
flatten([1,2,[3,4,[5,'红色']]])//['1', '2', '3', '4', '5', '小红']