2012-02-07 6 views
1

は、私が達成しようとしているもののいくつかのサンプルコードです:"for in"ループ内のサブオブジェクトにアクセスしますか?ここ

pingpong = { 
    paddleA: { 
     speed: 5, 
    }, 
    paddleB: { 
     speed: 6, 
    }, 
    paddleAI: { 
     AI1: "paddleA", 
     AI2: "paddleB" 
    } 
} 

paddleAI = pingpong.paddleAI; 
paddleA = pingpong.paddleA; 
paddleB = pingpong.paddleB; 

for (paddle in paddleAI) { 
    document.write(paddleAI[paddle].speed); 
} 

私はこのコードを実行すると、それは「未定義」を返し

私はどのパドルのようpaddleAIにテキスト値を使用しようとしています私はアクセスしたいスピードです。

paddleApaddleBの速度値を返すにはどうすればよいでしょうか?

注: これは私の実際のコードに似た唯一のデモで、それゆえ私は劇的に私が保管し、私の値にアクセスしていますどのように再構築する多くの部屋を持っていません。

+0

これは、あなたが代わりに '' pingpong'のpaddleAI'を参照している以外、働くだろう。 – cheeken

+0

申し訳ありませんが、サンプルコードで修正するのを忘れました。私はそれが今問題ではないことを知っています。 –

答えて

2

これはあなたが後にしているおそらく何です...

利用可能...

あなたの問題はあなたがパドル名を期待してループ内でpaddleを使用していたということです、実際にあなたがプロパティ名を取得した(EX ... AI1

https://stackoverflow.com/a/5263872/555384

for (paddle in paddleAI) { 
    document.write(pingpong[paddleAI[paddle]].speed); 
} 

、これはそれを行うには本当に悪い方法のように思えますが...

また、お使いの末尾のカンマはIEのスローが収まるようになります...オブジェクトの最後のコンマを削除/配列リテラル宣言

+0

編集されたコードを確認してください。 –

+0

@ ryansworld10編集の回答 – jondavidjohn

+0

私はそれを試して動作します。なぜ私はこのように正確に動作するのかわかりませんが、すべてが理にかなっているとは限りません。答えをありがとう! 私は私の例から後続のカンマを削除しました。私は完全なコードでそれらを持っていないので、なぜ私はそれらをそこに置くのか分からない –

1

DEMO

あなただけではなくpaddleAIpingpong.paddleAIのキーをループにしたいです。また、あなたはpaddleAIプロパティのを、つかむことを望んでいないパドルが何であるかをあなたに伝えpingpong.paddleAIの内容を使用して、キー

for (paddle in pingpong.paddleAI) { 
    var keyVal = pingpong.paddleAI[paddle]; 
    if (pingpong[keyVal].speed) 
     console.log(pingpong[keyVal].speed); 
    else //if you want 
     console.log("no speed on " + keyVal); 
} 
+0

これが彼の後ろにあるのかどうかわからない... – jondavidjohn

+0

編集したコードを確認してください –

+0

@ ryansworld10 - このコードはあなたが何を達成しているのですか?なぜこれが下落したのか分かりません。 –

1

はあなたが後にしているものを考えてみて、これは次のとおりです。

pingpong = { 
    paddleA: { 
     speed: 5, 
    }, 
    paddleB: { 
     speed: 6, 
    }, 
    paddleAI: { 
     AI1: "paddleA", 
     AI2: "paddleB", 
    }, 
} 

for (paddle in pingpong.paddleAI) { 
    document.write(pingpong[pingpong.paddleAI[paddle]].speed); 
} 
+0

編集したコードを確認してください –

0
alert(pingpong.paddleA.speed) 
alert(pingpong.paddleb.speed) 

これは単純な階層であり、ループは必要ありません。

+0

これは私のコードに基づいたデモです。私は単純に値を表示することができますが、私は私のアプリケーションで達成しようとしているもののために動作しません。 –

1

最初の参照はオフです。また、パドルはオブジェクトを参照しますが、値(本当にキーです)が必要です。コードは言葉よりも雄弁話す:(jsFiddle demo)

var pingpong = { 
    paddleA: { 
     speed: 5, 
    }, 
    paddleB: { 
     speed: 6, 
    }, 
    paddleAI: { 
     AI1: "paddleA", 
     AI2: "paddleB", 
    }, 
} 
//reference paddleAI 
var pAI = pingpong.paddleAI; 
for (paddle in pAI) { 
    //here paddle reference AI1 or AI2 but we want its value 
    var key = pAI[paddle]; 
    //and on top of that its value is a reference to the key we really want 
    var paddleRef = pingpong[key]; 
    document.write(paddleRef.speed); 
} 
+0

編集したコードを確認してください –

関連する問題