實現一個flatten函數,將一個嵌套多層的數組 array (嵌套可以是任何層數)轉換爲只有一層的數組

<!DOCTYPE html>
<html>
<script>
    const newArr = [];  

    function _flatten(arr){
    arr.forEach(val => {
        console.log(`start: ${val}`);
        if(Array.isArray(val)){
            _flatten(val);
        }else{
            console.log(`push start...${val}`);
            newArr.push(val);
        }
    });
}

    _flatten(arr);
    return newArr;
}



let res = flatten([1,[2],[3,[4]]]);
console.log(res);
alert(res);  // [1,2,3,4]

</script>
</html>

以上是可以正確返回的代碼。

 

但是,前一個版本,總是不能有正確的返回,總是返回[].

檢查看,是因缺少函數調用:_flatten(arr);

 


想着,可不可以自身調用?

 function flatten(arr) {
        const newArr = [];

        (function (arr) {
            function _flatten(arr) {
                arr.forEach(val => {
                    console.log(`start: ${val}`);
                    if (Array.isArray(val)) {
                        _flatten(val);
                    } else {
                        console.log(`push start...${val}`);
                        newArr.push(val);
                    }
                });
            }
        })(arr);

        // _flatten(arr);
        return newArr;
    }

還是返回[].

等道行深了好好研究下這個自調用吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章