题目描述:
编写一个 JavaScript 函数,接受一个仅包含数字的 多维数组 ,返回拍平以后的结果。例如传入:[1, [[2], 3, 4], 5],返回 [1, 2, 3, 4, 5]。(本题来源:阿里巴巴前端笔试题)
思路:
这道题我的想法是用回调,将数组里类型不是number的数接着作为参数传到函数中,将其转化成相应的数字,具体的做法是将数组转化为字符串,用字符串把每一个数字拼接起来,最后在分割成数组,代码就是下面这个样子:
const flatten = (arr) => {
let res=""
for(let i=0;i<arr.length;i++){
if(typeof(arr[i])!="number"){
let j=flatten(arr[i])
j=j.join("_")//可以用任意非数字来连接,即"_"可以用任意非数字字符来替代
res+=(j+"_");
}
else{
res+=arr[i]+"_"
}
}
res=res.split("_")
for(let j=0;j<res.length;j++){
res[j]=parseInt(res[j])//因为原类型为string,需要转化为number
}
res.pop()//用split分割的话因为结尾也有一个"_",结尾会多一个"NaN"项,要移除
return res;
}
代码通过,再来看看大神解法
const flatten = (arr) =>
arr.join().split(',').map(num=>parseInt(num)).filter(num=>!isNaN(num));
思路是类似的,先将数组转化为字符,然后分割,转number类型,过滤掉NaN
但看起来就十分舒服了。