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
2 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
functionflat(arr){varret=[]vardirty=falsearr.forEach(item=>{if(Array.isArray(item)){dirty=trueret.push(...item)}else{ret.push(item)}})returndirty?flat(ret):ret}
慕无忌1623718
TA贡献1744条经验 获得超4个赞
首先,只要是递归就可能爆,如果不想爆要么指定深度结束,要么换别的方法实现。functionfn1(deep){if(deep>0){deep--returnfn1(deep)}return;}fn1(100000)栗子//循环实现functionflat(arr){if(arr.length<1||!arrinstanceofArray)returnarr;letnewArray=[]while(arr.length>0){letnextTask=[];for(letiofarr){if(iinstanceofArray){nextTask=nextTask.concat(i);}else{newArray.push(i)}}arr=nextTask;}returnnewArray;}//生成深度测试数组用于验证爆栈lettestArray=Array(100000).fill().map((d,i)=>([i])).reduce((acc,cur)=>{cur[1]=acc;returncur;})console.log(flat(testArray))
添加回答
举报
0/150
提交
取消