ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript に関する興味深い質問: 多次元配列の初期化

JavaScript に関する興味深い質問: 多次元配列の初期化

黄舟
黄舟オリジナル
2017-01-22 15:02:222179ブラウズ

場合によっては、多次元配列を作成し、それを必要なデフォルト値に初期化する必要があります。

通常、最初に 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) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。