闲来撸码(javaScript)--flat

202 阅读1分钟

扁平化数组的方法多种多样,如用reduce和concat递归方式:

const flatInReduce = arr => {    
    return arr.reduce((acc, cur) => {       
        return acc.concat((Array.isArray(cur) ? flatInReduce(cur) : cur));    
    }, []);
}

flat为js数组的方法,用于扁平化数组,有一个参数用于指定要展开的层级,默认为Infinity

即展开为一维数组。

const newArray = arr.flat([depth]);

这里应用循环和递归方式模拟实现flat方法:

const myflat = (arr = [], deep = 1) => {    
    const stack = [...arr];    
    if (typeof deep !== 'number' && deep !== Infinity) {        
        throw new Error('deep arguments must be an typeof number or infinity!');    
    }   
    const flatten = [];   
    while (stack.length) {      
    const next = stack.shift();    
    if (Array.isArray(next) && deep >= 1) {        
        flatten.push(...myflat(next, deep - 1));       
     } else {    
        flatten.push(next);   
     } 
   }   
 return flatten;
}

一千个人有一千个哈莫雷特,有更多实现方法欢迎在评论区实现哈。