猿问

使用javascript 扁平化数组---5种方法

使用递归:map、reduce
functionflatten(arr){
varres=[];
arr.map(item=>{
res=Array.isArray(item)?res.concat(flatten(item)):res.push(item);
});
returnres;
}
functionflatten(arr){
returnarr.reduce((result,item)=>{
returnresult.concat(Array.isArray(item)?flatten(item):item);
},[]);
}
循环,一层一层剥开
functionflatten(arr){
while(arr.some(item=>Array.isArray(item))){
arr=[].concat(...arr);
}
returnarr;
}
黑科技:join、toString
functionflatten(arr){
returnarr.join(',').split(',').map(function(item){
returnparseInt(item);
})
}
functionflatten(arr){
returnarr.toString().split(',').map(function(item){
returnNumber(item);
})
}
上边这两个代码块表示自己也看不懂,大佬能帮忙解释一下吗?
尚方宝剑之说
浏览 642回答 2
2回答

繁花不似锦

1join用来讲数组元素按照某个字符来进行拼接成一个字符串。数组的所有元素都会被转换为string类型。也就相当于对所有的item进行调用toString最后在进行split,将字符串按照某字符进行分割,得到数组。22可以认为是1实现方案中的一部分toString,就是将整个数组转换为字符串进行输出,所有的item都会被转换为字符串,可以简单的理解为一个递归的过程。最后进行splitP.S.只是大概的思路,不保证ECMAScript文档中定义的流程就是这样的

不负相思意

官方解释:join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔,默认使用','letarr=[1,2,3,[34,12],[12,[34,[56,78]]]];arr.join()//"1,2,3,34,12,12,34,56,78"arr.join(',')//"1,2,3,34,12,12,34,56,78"arr.toString()//"1,2,3,34,12,12,34,56,78"//split之后arr.join(',').split(',')//["1","2","3","34","12","12","34","56","78"]对这种不明白的东西就先断点看结果,然后看解释。很多时候解释的并不透彻以及每个人的理解都不一样,重点是知道结果会如何以及如何得到这种结果
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答