Home / Blog / it

算法题:任意多维嵌套数组转换为一维数组

Author: Vic.Wang 2017/09/28 Tags:javascriptjswebalgorithmarrayjs算法算法数组多维数组数组转换

任意多维嵌套数组转换为一维数组

给定一个任意嵌套的多维数组将其转换为一维数组,数组中元素仅基本类型的元素或数组,不存在循环引用。

转换结果如下:

//[3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]] => [3, 2, -4, 5, 7, -3, "aa", "bb"]
                    
    var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]];

    //方法1
    function flatten(arr) {
        var newArr = [];

        function _flat(arr) {
            arr.forEach(val => {
                if (Array.isArray(val)) {
                    _flat(val);
                } else {
                    newArr.push(val);
                }
            })
        }

        _flat(arr);

        return newArr
    }

    //方法2
    function flatten(arr) {
        return arr.reduce(function(initArr, currentArr) {
            return initArr.concat(Array.isArray(currentArr) ? flatten2(currentArr) : currentArr);
        }, []);
    }