2016-08-19 6 views
0

オブジェクトを配列にプッシュしようとすると、正常に動作します。私はforループでこれを使用しているので、59個のオブジェクトを配列に入れることになっています。それは59のものを配列に入れますが、最初のものだけがオブジェクトです。ここでは、コードは次のようになります。ここではオブジェクトを配列にプッシュすると、そのオブジェクトの中に1つの値しかありません。

for (i = 0; i < game.Levels[LevelNum - 1].Generation[0].LengthGen; i++) { 
    noise = game.Levels[LevelNum - 1].Generation[0].Noise 
    var a = new Object(i * 20, 20, 20, Math.round(Math.random() * noise + 1)); 
    game.Levels[LevelNum - 1].Generation.push(a); 
    console.log("Generated " + i) 
} 

は、ページ上のコンソールからアクセス出力されます。

[Object, Number*57] 
//the times 52 is the number of "Number"'s repeated 

私が起こるに必要なものの配列は、高さを持つオブジェクトで満たされてのためにされ、長さ、x、およびy座標。その後、これを使ってボックスを描きます。現時点では私が使用しているコードは1つの値を持つオブジェクトのみを表示します。私はキーを割り当てようとすると(私はそれがどのように呼ばれているのかわからないが、値の前に "x:"をつけると)4つの値すべてに。私はそれを言うとき)は期待され、ゲームは読み込まれません。

+1

実行可能なスニペットとしてポストされたコードは実際に問題の動作を実行または表示する必要があります。 Objectコンストラクタは引数を1つしか取らず、残りは無視されることに注意してください。コンソールの出力は "Generated"という文字列と数字でなければなりません。 – RobG

+1

'var a = new Object(i * 20、20、20、Math.round(Math.random()* noise + 1));'に解決されます。 ) 'は、[* ToObject *](http://ecma-international.org/ecma-262/7.0/index.html#sec-toobject)のルールごとに新しいオブジェクトを返します。 – RobG

+0

@ RobGそれでは、それ以上の出力をする方法 – McMatt

答えて

1

valueプリミティブJavaScriptのデータ型を持つ、

var o = new Object(value) 

は、そのデータ・タイプと一致する値のラッパー・オブジェクトを作成します。また、@ RoGのコメントで述べたように、Objectはコンストラクタとして呼び出されたときに1つのパラメータしか取りません。

だから

するvar A =新しいオブジェクト(iは20、20、20、恐らくMath.round(Math.random()*ノイズ+ 1)*)。

するvar A =新しいオブジェクト(私は20 *)と同じ結果を生成します。

コンソールにログインした場合(それが数値として表示されますが、"typeof a"は依然として「オブジェクト」と評価すべきである、とa.constructorは、「番号」と評価すべきである20の複数のラッパーとしてNumberオブジェクトを作成しますではなく "オブジェクト")。

+0

どうすればいいですか? – McMatt

+0

[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)または格納する各値のプロパティ名を持つオブジェクトを押してみてください。これがあなたが探している答えでない場合は、あなたが達成したいことの詳細を質問に更新してください。 – traktor53

関連する問題