递归算法在拉平数组中有很多中用法,下面介绍两种
function flatten(arr){
arr2 = []
function _flat(arr){
arr.forEach(val => {
if(Array.isArray(val)){_flat(val)}
else( arr2.push(val))
});
}
_flat(arr)
return arr2
}
var arr = [1, [2], [3, [[4]]]]
var arr2 = flatten(arr)
console.log(arr2)
- 注意:在拉平的时候最好不要引进i,因为你没办法确定i的值。
- 使用数组判断语句是
Array.IsArray(val)
判断val是否为数组 - 在中间引入新的函数_flat是为了避免上面的arr2重复,同时可以单独调用
方法二
function flattern2(arr){
return arr.reduce(function(initArr,currentArr){
return initArr.concat(Array.isArray(currentArr)?flattern2(currentArr):currentArr)
},[])
}
var arr = [1, [2], [3, [[4]]]]
var arr2 = flattern2(arr)
console.log(arr2)
方法十分巧妙,使用拼接语句,其中reduce主要是起一个遍历的作用。