ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript に関する興味深い質問: 多次元配列の初期化
場合によっては、多次元配列を作成し、それを必要なデフォルト値に初期化する必要があります。
通常、最初に 1 次元配列を作成し、次にこの 1 次元配列内の 2 次元配列を参照してから、N 次元配列まで参照し、その内容をデフォルト値で埋めます。
このプロセスでは、多くのループを記述する必要があり、必然的に少し面倒になります。そこで、多次元配列の初期化を便利に呼び出せるようにツール メソッドを記述する方法を考えてみてはいかがでしょうか。
次のようなメソッドが必要だと思います:
dim( d1 [,d2 [,d3 [... ]]], value )
そのパラメータリストを見ると、d1、d2、d3は各次元配列によって参照される要素の数を表し、valueは初期値を表します。
この値が関数の場合は、関数の戻り値を参照します。
いくつかの例を見てみましょう:
dim( 3,3,"x" ) // => [['x','x','x'],['x','x','x'],['x','x','x']]
ここで、1 ビット配列は 3 つの 2 次元配列を参照し、各 2 次元配列は 3 つの初期化値を参照します 'x'
dim( 2,2,2,0 ) // => [[[0,0],[0,0]],[[0,0],[0,0]]]
ルールここは上記と同じです
dim( 3, true ) // => [true,true,true]
ここでは、一次元配列は3つのブール値を参照しますtrue
var xxx = function(){ return "xX" } dim( 2,5,xxx ) // => [['xX','xX','xX','xX','xX'],['xX','xX','xX','xX','xX']]
ここでの初期化値は関数なので、それが返す結果を入力します
この質問には次の使用が必要ですN 次元配列が含まれるため、再帰の必要があります。
これは、配列を構築し、深く探索するプロセスです。
私の方法では、パラメータ deep を使用して現在の深さを記録します。
たとえば、dim(2,2,2,0) の場合、現在の deep が 0 の場合、最初のパラメータ 2 に対応し、2 つの配列が作成されること、つまり deep の値が一貫していることを示します。パラメーター list のインデックスを使用して、構築する配列または値の数を表します。
deep が最も深いレベルに達した場合、初期化と代入が実行可能であることを意味し、for ループが現在の配列を埋めます。
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; }
上記は JavaScript に関する興味深い質問です。多次元配列の初期化の内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。