Array.prototype.flat()方法可以将嵌套数组进行扁平化处理成一维数组,可以接受一个数字为展开的几层,默认为1层。如果不管嵌套多少层都展开可以传入一个Infinity。letarr1=[1,2,3,4,5,[6,7,8,9,10]]arr1.flat();//[1,2,3,4,5,6,7,8,9,10]letarr2=[1,2,3,[4,5,6,[7,8,9,[10]]]]//这里嵌套了好几层arr2.flat(Infinity)//[1,2,3,4,5,6,7,8,9,10]//递归实现functionflat(arr){if(arr.length<1||!arrinstanceofArray)returnarr;letnewArray=[]for(letiofarr.values()){if(iinstanceofArray){newArray=[...newArray,...flat(i)]}else{newArray.push(i)}}returnnewArray;}letarr5=flat([1,2,3,[4,5],[6,7,8,9,[10,11,12]]])console.log(arr5)//[1,2,3,4,5,6,7,8,9,10,11,12]我用递归实现了一个flat(),但是每嵌套一层,都会调用一次递归函数在函数内形成一个调用帧。假如嵌套十万层就会爆栈了。怎么用尾递归来进行优化呢?尾调用:一个函数的最后一步返回另一个函数称之为尾调用functiong1(){return1}functionfn1(){returng1()}fn1函数执行到最后一步调用另一个函数g1函数调用自身,称为递归。如果尾调用自身,就称为尾递归。那么问题是,怎么使用尾递归来优化上面的递归函数呢?脑子有点笨,暂时想不出。所以求各位朋友分享下思路吧问题描述问题出现的环境背景及自己尝试过哪些方法相关代码//请把代码文本粘贴到下方(请勿用图片代替代码)你期待的结果是什么?实际看到的错误信息又是什么?
蓝山帝景
慕无忌1623718
相关分类