Twlig / issuesBlog

MIT License
3 stars 0 forks source link

扁平化数组 #36

Open Twlig opened 2 years ago

Twlig commented 2 years ago

扁平化就是将嵌套的数组变成一维数组。

var array = [[1,2,3],4,5,6,[[7]],[]];
flatten(array);
//——>
[1,2,3,4,5,6,7]
  1. reduce方法

    function flatten(arr) {
       return arr.reduce((flat, toflat)=>{
           return flat.concat(Array.isArray(toflat) ? flatten(toflat) : toflat)
       },[])
    }
  2. toString方法

    function flatten(arr) {
       let arrStr = arr.toString().split(',');
       return arrStr.filter(item => item != '').map(item => parseInt(item));
    }
  3. 迭代方法

    function flatten(arr, newArr = []) {
       for(let item of arr){
           if(Array.isArray(item)) {
               flatten(item, newArr);
           }else {
               newArr.push(item);
           }
       }
       return newArr;
    }
  4. 控制扁平层数

    for of循环

    function flat(src, n, dest = []) {
       if(n > 0) {
           for(let item of src) {
               if(Array.isArray(item)){
                   flat(item, n - 1, dest)
               }else {
                   dest.push(item)
               }
           }
       }else {
           dest.push(src)
       }
       return dest
    }
  5. 控制扁平层数

    forEach循环 + concat

    function flat(src, n, dest = []) {
       n > 0 ? src.forEach(item => dest.concat(Array.isArray(item) ? flat(item, n - 1, dest) : dest.push(item))) : dest.push(src)
       return dest
    }
  6. 控制扁平层数

    reduce + concat

    function flat(src, n) {
       return n > 0 ? src.reduce((pre,cur) => {
           return pre.concat(Array.isArray(cur) ? flat(cur, n - 1) : cur)
       }, []) : src
    }