为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2019-08-09 23:12:59
实现一个嵌套数组的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 回答

?
qq_慕侠6049141

TA贡献1条经验 获得超0个赞

[1,2,[3,4],[5,[6,7]]].join(',').split(',').map(item => item - 0);
查看完整回答
反对 回复 2021-05-27
?
温温酱

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)
                            
查看完整回答
反对 回复 2019-08-09
?
慕码人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送回内层数组中的元素,不会改动原始输入originalinput
stack.push(...next);
}else{
res.push(next);
}
}
//使用reverse恢复原数组的顺序
returnres.reverse();
}
flatten(arr1);//[1,2,3,1,2,3,4,2,3,4]
                            
查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 456 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信