实现一个嵌套数组的flat方法,展开深度为可根据参数设定展开深度,效果如下:vararr=[1,2,[3,4],[5,[6,7]]]varflatArr=flat(arr,1)console.log(flatArr)展开结果:[1,2,3,4,5,[6,7]]我知道Array对象的flat方法,如果要自己封装flat方法要怎么做呢
3 回答

温温酱
TA贡献1752条经验 获得超4个赞
是写出这个方法的大致逻辑嘛?functionflat(arr,deepth){newArr=[]deepth--arr.forEach(v=>{if(vinstanceofArray){newArr.push(...v)}else{newArr.push(v)}})if(deepth>0)flat(newArr,deepth)returnnewArr}vararr=[1,2,[3,4],[5,[6,7,[8,9,10]]]]varflatArr=flat(arr,2)console.log(flatArr)

慕码人8056858
TA贡献1803条经验 获得超6个赞
参考MDNArray.prototype.flat(),使用flat或reduce//使用reduce、concat和递归无限反嵌套多层嵌套的数组vararr1=[1,2,3,[1,2,3,4,[2,3,4]]];functionflattenDeep(arr1){returnarr1.reduce((acc,val)=>Array.isArray(val)?acc.concat(flattenDeep(val)):acc.concat(val),[]);}flattenDeep(arr1);//[1,2,3,1,2,3,4,2,3,4]//不使用递归,使用stack无限反嵌套多层嵌套数组vararr1=[1,2,3,[1,2,3,4,[2,3,4]]];functionflatten(input){conststack=[...input];constres=[];while(stack.length){//使用pop从stack中取出并移除值constnext=stack.pop();if(Array.isArray(next)){//使用push送回内层数组中的元素,不会改动原始输入originalinputstack.push(...next);}else{res.push(next);}}//使用reverse恢复原数组的顺序returnres.reverse();}flatten(arr1);//[1,2,3,1,2,3,4,2,3,4]
添加回答
举报
0/150
提交
取消