萌新求教!js嵌套数组的展开

实现一个嵌套数组的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方法要怎么做呢
守着一只汪
浏览 457回答 3
3回答

qq_慕侠6049141

[1,2,[3,4],[5,[6,7]]].join(',').split(',').map(item => item - 0);

温温酱

是写出这个方法的大致逻辑嘛?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

参考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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript