网上有不少提供数组降维的方法,但是一般是二维数组,并且对多维数组的处理不好。降维自然会想到用concat方法,如果只是全部循环用push的话,那样写起来更麻烦,必要时该用concat的就用concat。

function dist(arr) {
    var res = [];
    for (var i = 0; i < arr.length; i++) {
        if (Object.prototype.toString.call(arr[i]) === '[object Array]') {
            res = res.concat(dist(arr[i]));
        } else {
            res.push(arr[i]);
        }
    }
    return res;
}
var re = dist([1, 2, [3, 4, [5, 6, [7, 8]]]]);
console.log('re', re); //输出[1,2,3,4,5,6,7,8]

其实逼格更高的写法是用reduce

function dist(arr){
    if(Array.isArray(arr)){
        return arr.reduce(function(prev, curr){
            return prev.concat(dist(curr));
        },[]);
    }else{
        return arr;
    }
}
分类: Javascript

发表评论

电子邮件地址不会被公开。 必填项已用*标注