首頁  >  文章  >  web前端  >  JavaScript趣題:多維數組初始化

JavaScript趣題:多維數組初始化

黄舟
黄舟原創
2017-01-22 15:02:222210瀏覽

有時候,我們需要建立一個多維的數組,並將它初始化為我們想要的預設值。

通常情況下,我們會先建立一個一維數組,接著在這個一維數組內引用二維數組......直到N維數組,然後把它的內容填充為預設值。

這個過程,我們需要寫很多循環,難免有些繁瑣,那麼,何不想辦法寫個多維數組初始化的工具方法,方便我們來調用呢?

我猜你一定想要個這樣的方法:

dim( d1 [,d2 [,d3 [... ]]], value )

來看它的參數列表,d1,d2,d3代表各個維度數組所引用的元素個數,value代表初始值。

這個value可能是函數,如果是這種情況,我們就引用函數的回傳值。

來看看幾個例子:

dim( 3,3,"x" ) // => [['x','x','x'],['x','x','x'],['x','x','x']]

這裡一位數組引用了3個二維數組,每個二維數組引用了3個初始化值'x'

dim( 2,2,2,0 ) // => [[[0,0],[0,0]],[[0,0],[0,0]]]

這裡規則同上

dim( 3, true ) // => [true,true,true]

這裡reee

var xxx = function(){ return "xX" }
dim( 2,5,xxx ) // => [['xX','xX','xX','xX','xX'],['xX','xX','xX','xX','xX']]

這裡規則同上

function dim(){  
    var len = arguments.length;  
    var args = Array.prototype.slice.call(arguments,0,len-1);  
    var content = arguments[len-1];  
    var result = [];  
      
    var traverse = function foo(from,deep){  
        var arg = args[deep];  
        if(deep < args.length - 1){  
            for(var i=0;i<arg;i++){  
                var array = [];  
                from.push(array);  
                foo(array,deep+1);  
            }  
        }  
        else{  
            for(var i=0;i<arg;i++){  
                if(typeof content === "function"){  
                    from.push(content());  
                }  
                else{  
                    from.push(content);  
                }  
            }  
        }  
    };  
    traverse(result,0);  
    return result;  
}

這裡一維數組引用了3個boolean值true

rrreee

這裡初始化值是一個函數,所以我們填入它回傳的結果

這個題目因為涉及N維的數組,所以需要使用遞歸。

它是一個邊建構數組,邊深度遍歷的過程。

在我的方法中,使用了一個參數deep來記錄當前的深度。

例如dim( 2,2,2,0 ),如果當前deep為0,那麼就對應第一個參數2,說明要建立2個數組,也就是說,deep的值和參數列表的索引是一致的,代表要建構多少個陣列或值。 🎜🎜如果deep達到了最深,表示可以進行初始化賦值了,for迴圈填入目前的陣列。 🎜rrreee🎜以上就是JavaScript趣題:多維數組初始化的內容,更多相關內容請關注PHP中文網(www.php.cn)! 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn