关于递归的使用

递归算法在拉平数组中有很多中用法,下面介绍两种

 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主要是起一个遍历的作用。

你可能感兴趣的:(关于递归的使用)