1.数组扁平化

上面的数据多层树状构造解决成只有一层children的构造

data = [  {    name: "About",    path: "/about",    children: [      {        name: "About US",        path: "/about/us"      },      {        name: "About Comp",        path: "/about/company",        children: [          {            name: "About Comp A",            path: "/about/company/A",            children: [              {                name: "About Comp A 1",                path: "/about/company/A/1"              }            ]          }        ]      }    ]  }]// 解决后的构造[  {    name: "About",    path: "/about",    children: [      {        name: "About US",        path: "/about/us"      },      {        name: "About Comp",        path: "/about/company",              },      {        name: "About Comp A",        path: "/about/company/A"      },      {         name: "About Comp A 1",         path: "/about/company/A/1"      }    ]  }]

代码实现:

//递归遍历实现    var recursiveFunction3 = function(){        var aa=[]        var cc=[]        const getStr = function(data){            data.forEach(item => {            aa.push({                name: item.name,                path: item.path            })            if(item.children?.length){                let children=getStr(item.children)            }        })        }        getStr(data)        cc.push({                name: aa[0].name,                path: aa[0].path,                children:aa.slice(1)        })        // console.log(cc)    }    recursiveFunction3()

代码基于上个根底优化:

var recursiveFunction4 = function(){        var aa=[]        const getStr = function(data){            data.forEach(item => {            aa.push({                name: item.name,                path: item.path            })            if(item.children?.length){                let children=getStr(item.children)            }        })        }        getStr(data[0].children)        //...开展运算符  因为前两项数据没变间接拿来用了拷贝 而后把最初一项children替换掉        aa= [{...data[0],children:aa}]        console.log(aa)    }    recursiveFunction4()//基于recursiveFunction3()优化

还有一种计划借鉴大佬的,代码如下:

//写了一个可自在定义扁平化层级的代码,level代码不扁平的层级function flatTree(data, level = 0, index = 0){    let result = [], obj;    data.forEach(item => {        result.push(obj = {            name: item.name,            path: item.path        })                if(item.children?.length){            let children = flatTree(item.children, level, index + 1)            if(level > index){                obj.children = children            }else{                result = result.concat(children)            }        }    })    return result}

降维数组

//利用[].concat.apply实现降维      var arr=[[1,2],[3,4]];    function Jw(obj){        console.log(Array.prototype.concat.apply([],obj))            return Array.prototype.concat.apply([],obj);    }    Jw(arr);//如果concat办法的参数是一个元素,该元素会直接插入新数组中;如果参数是一个数组,该数组的各个元素将被插入到新数组中    function reduceDimension(arr){        let ret = [];        for(let i=0;i<arr.length;i++){            ret=ret.concat(arr[i])        }        console.log(ret)        return ret;    }    reduceDimension(arr)  //递归    function reduceDimension(arr){        let ret = [];        let toArr = function(arr){            arr.forEach(function(item){                item instanceof Array ? toArr(item) : ret.push(item);            });        }        toArr(arr);        console.log(ret)        return ret;    }    reduceDimension([1, 2, [3, 4, [5, 6]]])       

排序

升序降序排序函数sortNumber

const arr1 = [6,1,2,3,4];function sortNumber(a,b){     return b-a;}arr1.sort(sortNumber);console.log(arr1)// [6, 4, 3, 2, 1]

依照flag排序,为true的在后面显示

//其实这个和上边的原理是一样的等同,只是简写了const arr2 = [            { id: 10, flag: true },            { id: 5, flag: false },            { id: 6, flag: true },            { id: 9, flag: false }];const r = arr2.sort((a, b) => b.flag - a.flag);console.log(r);// [//     { id: 10, flag: true },//     { id: 6, flag: true },//     { id: 5, flag: false },//     { id: 9, flag: false }// ]