使用递归:map、reducefunctionflatten(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、toStringfunctionflatten(arr){returnarr.join(',').split(',').map(function(item){returnparseInt(item);})}functionflatten(arr){returnarr.toString().split(',').map(function(item){returnNumber(item);})}上边这两个代码块表示自己也看不懂,大佬能帮忙解释一下吗?
2 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
1join用来讲数组元素按照某个字符来进行拼接成一个字符串。数组的所有元素都会被转换为string类型。也就相当于对所有的item进行调用toString最后在进行split,将字符串按照某字符进行分割,得到数组。22可以认为是1实现方案中的一部分toString,就是将整个数组转换为字符串进行输出,所有的item都会被转换为字符串,可以简单的理解为一个递归的过程。最后进行splitP.S.只是大概的思路,不保证ECMAScript文档中定义的流程就是这样的
不负相思意
TA贡献1777条经验 获得超10个赞
官方解释: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"]对这种不明白的东西就先断点看结果,然后看解释。很多时候解释的并不透彻以及每个人的理解都不一样,重点是知道结果会如何以及如何得到这种结果
添加回答
举报
0/150
提交
取消