2011-07-07 9 views
1

私はJavaScriptの配列を持っている:配列アイテムをJavaScriptのインデックスで参照するにはどうすればよいですか?

Fruit > Banana > Colour > Yellow 
       > Size > Large 
       > Cost > $3.50 
     > Apple > Colour > Green 
       > Size > Small 
       > Cost > $0.42 

私が使用して値を取得することができます:

私はインデックスを使用して同じ値を取得するにはどうすればよい
alert(Fruit['Banana']['Colour']); 

?例えば、。あなたがあなた自身の質問に答えているように見えるので、

for (var a in Fruit) { 
    //var a gives me "Banana" and "Apple" 
    for (var b in Fruit[a]){ 
     //var b gives me "Colour", "Size" and "Cost" 
     //Fruit[a][b] gives me the values 
    } 
} 
+1

連想配列をお探しですか? – fncomp

+0

私はあなたがオブジェクトを使っているのを見ていますが、インデックスも使いたいと思います。 @Edgar Villegas Alvaradoが述べているように、これは固有の機能ではありません。 – fncomp

答えて

1

すべてオブジェクトがassociative arraysあるという事実にはJavaScript array objectsが混乱しているように見えます:ここで私はランダムに見つかったものです。通常のオブジェクト(例えば、あなたが言及する「フルーツ」オブジェクト)は、(整数インデックスの自然順序付けのために)Arrayオブジェクトが行うのに対し、プロパティ(キー)の本来の順序付けを持たないことに注意してください。基本的に、配列は、最後の整数インデックス(ゼロから始まる)+ 1を格納する特別な「長さ」プロパティを持つオブジェクトに過ぎません。

任意のオブジェクトのプロパティは、任意(例えばランダム)ために反復される。

var obj = {a:'Aye', b:'Bee', c:'See', d:'Dee'}; 
for (var prop in obj) { 
    alert(prop + '=' + obj[prop]); // No order is guaranteed. 
} 

は厳密に言えば、偶数アレイはfor-inループを使用して、自然な順序で反復する仕様によって保証されていません。しかし、ほとんどのJavaScriptインタプリタはそうしています。 (特に、IE8は自然順序ではなくインデックスが割り当てられた順序で繰り返します)これは、インデックスを使用して配列を常にforループで繰り返す必要がある理由です。

var arr = ['a', 'b', 'c', 'd', 'e', 'f']; 
for (var i=0; i<arr.length; i++) { // i = [0 .. length-1] 
    alert(arr + '=' + arr[i]); // Explicitly order as 'a', 'b', 'c'... 
} 

これらの違いは、例えば、「バナナ」、「アップル」、「カラー」、「サイズ」(あなたの「果実」オブジェクトが定義されているかにかかわらずのキーの厳密な順序付けを確保するための信頼できる方法がないことを意味します、など)を使用してください。

+0

これはいいです、私は "色"、 "サイズ"と "コスト"を得ることができますどのように私はまた、それらの値を取得するのですか? forループやforループのように? – Craig

+0

@Craig:私の更新された答えを見てください: 'obj [prop]'を使ってみてください。ここで 'prop'は' for ... in'ループのイテレータ変数です。 – maerics

+0

ありがとうございました! – Craig

2

私は、少し混乱しています:

alert(Fruit[0][0]); 

は、あなたが正しい方向に私をリードみんなありがとう、ここで私は後にされたソリューションです。あなたのアレイがどのようにセットアップされているかもわかりません。しかし、あなたは、この例を見てみた場合、あなたはそれがここで働いて見ることができます:

http://jsfiddle.net/uyNnH/

これは、トップレベルの配列は、あなたの果物の種類と第二レベルのアレイは、それぞれの果物の種類のプロパティが含まれて含まれていることを前提としています。

更新

Mozillaothersから:

はJavaScript 1.0で、あなたは自分の財産 名前または序インデックスで オブジェクトのプロパティを参照することができます。あなたが最初にその 名前でプロパティを定義 場合 はJavaScript 1.1以降では、しかし、あなたは常に その名前で参照しなければならない、とあなたが最初にインデックスで プロパティを定義した場合、あなたは 常にを参照する必要がありますそのインデックスによって

したがって、インデックス付き/序数ベースの配列ではなく、連想配列を宣言することが問題です。私が考えることができる唯一の解決策は、(醜い)forループを使用することです。ここではいくつかの未テスト擬似コードです:

function getItemByIndex(index, array) { 
    var counter = 0; 

    for (item in array) 
    { 
     if (counter == index) 
     { 
      return item; 
     } 

     counter++; 
    } 
} 
+0

両方のメソッドを使用して値を取得できるようにします。 しかし、フルーツ[0] [0]は機能しません。 – Craig

+0

私はそれを行う簡単な方法はありませんが参照してください..私は私の答えを修正します。 – Kon

+0

配列は次のようになります: フルーツ= [バナナ=> [色=> '黄色'、サイズ=> '大きい'、コスト=> '$ 3.50']、アップル=> [色=> '緑' Size => 'Small'、Cost => '$ 0.42']]; – Craig

1

あなたはことはできません、あなたの配列

0

あなたドンに新しい要素を使用すると、数字のインデックスにあなたの文字列のインデックスをコピーして、彼らは次のようになりない限り配列を作成する方法やそれらの値を割り当てる方法を示していますが、JavaScript配列とJavaScriptオブジェクトの違いがわからないようです。

オブジェクトは文字列のキーを持つプロパティを持ちますが、インデックス整数を持つプロパティにはキーだけでアクセスできません。

配列が配列length性のような機能とsort()ようないくつかの方法を提供するオブジェクトの特殊なタイプである、等配列特性は、通常、数値インデックスで割り当てられ、length性は、それらの数値添字特性に基づいているが、配列はまだオブジェクトなので、プロパティに文字列キーを割り当てることもできます。myArray['banana'] = ..と言うと、 'banana'プロパティはインデックス番号でアクセスできません。

「バナナ」のようなキーが必要な場合は、配列をまったく使用しないでください。単純なオブジェクトを使用してください。

もっと詳しく説明する記事はたくさんあります。 http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/

+0

私はphp(配列の配列)で配列を作成してからjson_encodeを使ってjavascriptに送るので、オブジェクトがあると思います。 – Craig

+0

ああ。 PHP配列とJS配列は同じ規則に従いません。 – nnnnnn

関連する問題