2016-09-15 13 views
-1

オブジェクトの配列を使用してキャンバス内のアイテムをランダムに印刷しています。各オブジェクトは異なるランダムな色を持つ必要がありますが、すべてのオブジェクトが同じコードを取得するように記述しています。オブジェクト内で関数を実行

var arrayOfObjects = [ 
    {x: 1, y: 5, r: 10, color: pickColor}, //gets random color 
    {x: 2, y: 6, r: 10, color: pickColor} // should get a different color 
    //and so on... 
]; 

私は彼らがすべて異なる色を得るように、各オブジェクトの内部で実行される機能をpickColor変数を交換しようとしたが、私は私の色の配列内の色を選択するために、この値を使用するように見えることはできません。

これは明らかに動作しません:

{x: 1, y: 5, r: 10, color: colorList[parseInt(Math.random() * colorList.length)]}, 

編集:このコードは動作しますが、問題は、デバッグツールでありませんヒントを明らかに無関係な行から来ました。あなたの答え

+3

実際にはうまくいくはずです。どうしてそんなことをしなかったと思う? – Bergi

+0

あなたのフィーリングに関して、[配列の 'for ... in'列挙体を使わないでください](https://stackoverflow.com/q/500504/1048572)! – Bergi

+0

'color:pickMeAColor()'のような解決策が良いかもしれませんが、うまくいくはずです... –

答えて

0

メイクpickColor機能とそれを呼び出す複数回 ありがとう:

var colorList = ["#E57373", "#F06292", "#BA68C8", "#9575CD", "#7986CB", "#64B5F6", "#DCE775", "#AED581", "#81C784", "#FFD54F"]; 

function pickColor() { 
    var randIndex = parseInt(Math.random() * colorList.length); 
    return colorList[randIndex]; 
} 

var arrayOfObjects = [ 
    {x: 1, y: 5, r: 10, color: pickColor()}, 
    {x: 2, y: 6, r: 10, color: pickColor()}, 
    //and so on... 
]; 

効果は、ちょうどあなたの第二のスニペットと同じであり、あなたはすべてのオブジェクトのために自分自身を繰り返す必要はありません除いて。

+0

あなたの答えをありがとう、このメソッドは、よりクリーンな方法です。 – Lau