2013-05-19 16 views
7

私は特別に値を追加したいの後、それははJavaScript - コントロール二次元動的配列

var dynamic = new Array(); 
dynamic[] = new Array(); 


のように(多分)の要素を限定するものではなく、JavaScriptで2次元動的配列を初期化したいですアレイのように

dynamic[id].push(2); // id = 3, dynamic[3][0] = 2 
... 
dynamic[id].push(3); // id = 3, dynamic[3][1] = 3 
... 
dynamic[id].push(5); // id = 5, dynamic[5][0] = 5 

可能ですか?私はどのように行うことができますおかげ

+0

あなたは、あなたはそれが存在しない場合は、自動的にdynamic' 'にアクセスしようとしたインデックスに新しい空白の配列を取得したいわけ? – Dogbert

+0

2D配列を直接初期化することはできません。しかし、配列要素を最初の配列にpush()して効果的に2Dにすることができます。 – techfoobar

+0

2D配列を作成したいですか? @Ingoバークは:) –

答えて

5

は、あなたができることの一つは、このような何か(jsfiddle)で、:もちろん

var dynamic = []; 

dynamic.push = function (id, value) { 
    if (!this[id]) { 
     this[id] = []; 
    } 

    this[id].push(value); 
} 

dynamic.push(3, 2); 
dynamic.push(3, 3); 
dynamic.push(5, 5); 

、これはさらに良く行うことができますが、それは全体でポイントを取得します。個人的に、私はこれのためのクラスを書くだろう。

編集:これはそれからの読み取り時の世話をする必要がundefined値の全体の多くを持つ高いポテンシャルを持つ配列を作成することも、覚えておいてください。また、このような穴のある配列はパフォーマンスが悪い(これが問題になるのであれば、数百、さらに数百の値でも問題ありません)。

+0

を行ったよう – DeLe

+0

@Ingoバーク1クールのおかげだとウル答えてくれてありがとうuはplsは私はこの多次元配列例:から値を取得しますどのように投稿することができます: '私だけ必要id = 3の値は(3,2)と(3,3)のようになります。 –

0

pushを上書きするのが最適な方法ではない可能性があります。別のメソッド/関数を追加すると、理解が簡単になります。 push(1,3)を読んで誰かが、これはあなたが次のことを行うことができます。1.

var dynamic = []; 

dynamic.item = function(index) { 
    if (!dynamic[index]) { 
     dynamic[index] = []; 
    } 
    return dynamic[index]; 
} 

項目にあなたは、配列の代わりに、3に1と3を押していると仮定かもしれません:

dynamic.item(1).push(1)

」場合item "が存在しない場合、返される前に作成され、配列の両方の次元ですべての配列メソッドを使用できます。

これをすべての配列で使用できるArrayプロトタイプに追加することで、これを少し一般的にすることもできます。

Array.prototype.item = function(index) { 
    if (!this[index]) { 
     this[index] = init; 
    } 
    return this[index]; 
} 
+0

ええ、私が言ったように、より良い方法があります。そして、私はまだクラスを最も好きにしたいと思っています。 :) –