迭代、递归扁平化(手写系列)

260 阅读1分钟
//迭代的实现:
 let arr = [1, 2, [3, 4, 5, [6, 7], 8], 9, 10, [11, [12, 13]]]

 const flatten = function (arr) {
     while (arr.some(item => Array.isArray(item))) {
         arr = [].concat(...arr)
     }
     return arr
 }

console.log(flatten(arr))

//递归的实现(ES6简写):
 const flatten = array => array.reduce((acc, cur) => 
     (Array.isArray(cur) ? [...acc, ...flatten(cur)] : [...acc, cur]), []
 ) 

//JavaScript写法 
flatten(origin) {   
    var result = [];  
    for(var i = 0; i< origin.length; i++) {
        var item = origin[i];    
        if(item.data&&item.data.length) {
            result.push(item);
            item.data ? result = result.concat( flatten(item.data) ) : ''
        } else {      
            result.push(item);    
        }  
    }  
    return result;
}