JS多维数组转一维

题目:

  var array = [1, [2, [3, 4], [5, 6]], 7, 8];

  写一个方法 flatArray(),得到数组 [1, 2, 3, 4, 5, 6, 7, 8]

解答:

  1.低端写法(调用原生方法):

function flatArray(arr) {
    var temp =  arr.join().split(','),
        len = temp.length,
        result = [];
    for(var i=0; i<len; i++) {
        result.push(parseInt(temp[i]));
    }
    return result;
}

  2.普通写法1(递归思想):

function flatArray(arr) {
    var result = [];
    for(var i = 0, l = arr.length; i < l; i++){
        if(arr[i] instanceof Array) {
            result = result.concat(arguments.callee(arr[i]));
            // 或result = result.concat(flatArray.call(this, arr[i]));
        }
        else {
            result.push(arr[i]);
        }
    }
    return result;
}

  3.普通写法2(利用forEach和三元表达式减少代码量,可读性较差)

function flatArray(arr) {
    var result = [];
    arr.forEach(function(item, index, origin){
        Array.isArray(item) ? result = result.concat(flatArray(item)) : result.push(item);
    })
    return result;
}

  4.高端写法(闭包思想):

var flatArray = function(ret) {
    function toArr(arr) {
        arr.forEach(function(item) {
            item instanceof Array ? toArr(item) : ret.push(item);
        });
    }
    
    return function(arr) {
        toArr(arr);
        return ret;
    }
    
}([]);

PS:   

  如有更好的算法(eg:不使用递归),欢迎留言告知,不甚感激。

原文地址:https://www.cnblogs.com/tww316/p/4555812.html