有時候,我們需要建立一個多維的數組,並將它初始化為我們想要的預設值。
通常情況下,我們會先建立一個一維數組,接著在這個一維數組內引用二維數組......直到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)! 🎜