2017-07-17 4 views
0

匿名関数の値の戻り値を配列にプッシュする方法を教えてください。私はこのコードで試したが、うまくいきません。どこで間違った匿名関数を追加するarayを返す

for (var i = 0; i < num; i++) { 
     //get ramdom color 
     // arr.push(randomColor()); 
     arr.push(function() { 
      //pick a "red" from 0 - 255 
      var r = Math.floor(Math.random() * 256); 
      //green 0 - 255 
      var g = Math.floor(Math.random() * 256); 
      //blue 0 -255 
      var b = Math.floor(Math.random() * 256); 

      return "rgb" + "(" + r + ", " + g + ", " + b + ")"; 
     }); 
    } 
+0

なぜ 'arr.push(randomColor());'を? – Andreas

+0

私はすでにrandomcolor()を書いていますが、私はただのAnonymous関数を試してみたいと思います。ありがとうございました。 –

答えて

1

これらの関数をループ内で呼び出すことはできませんでした。

let arr = []; 
 
let num = 3; 
 

 
for (let i = 0; i < num; i++) { 
 
    arr.push((() => { 
 
    let r = Math.floor(Math.random() * 256); 
 
    let g = Math.floor(Math.random() * 256); 
 
    let b = Math.floor(Math.random() * 256); 
 

 
    return "rgb" + "(" + r + ", " + g + ", " + b + ")"; 
 
    })()); 
 
} 
 

 
console.log(arr);

1

はここであなたがそれを行うことができる方法ですした

for (var i = 0; i < num; i++) { 
     //get ramdom color 
     // arr.push(randomColor()); 
     arr.push(function() { 
      //pick a "red" from 0 - 255 
      var r = Math.floor(Math.random() * 256); 
      //green 0 - 255 
      var g = Math.floor(Math.random() * 256); 
      //blue 0 -255 
      var b = Math.floor(Math.random() * 256); 

      return "rgb" + "(" + r + ", " + g + ", " + b + ")"; 
     }()); // Note the two brackets. 
    } 

は、第二の最後の行にある2つのブラケットに注意してください。彼らはすぐに機能を実行するためのものです。

このようなパターンには注意してください。このようなコードで読者を混同するのは簡単です。むしろ次のようなものを使用することができます。

function getRandomColor() { 
    //pick a "red" from 0 - 255 
    var r = Math.floor(Math.random() * 256); 
    //green 0 - 255 
    var g = Math.floor(Math.random() * 256); 
    //blue 0 -255 
    var b = Math.floor(Math.random() * 256); 

    return "rgb" + "(" + r + ", " + g + ", " + b + ")"; 
} 

for (var i = 0; i < num; i++) { 
    //get ramdom color 
    // arr.push(randomColor()); 
    arr.push(getRandomColor()); 
} 
+0

はい、間違いなく動作します。どうもありがとう。 –

+0

私はすでにgetRandomColor関数を書いていますが、私は匿名関数でそれを試してみたいです。 –

+0

その後、最初のサンプルがあなたのために仕事をします。 – Nisarg

2

は、この複雑する必要はありません:

for (var i = 0; i < num; i++) { 
    //get ramdom color 
    //pick a "red" from 0 - 255 
    var r = Math.floor(Math.random() * 256); 
    //green 0 - 255 
    var g = Math.floor(Math.random() * 256); 
    //blue 0 -255 
    var b = Math.floor(Math.random() * 256); 
    var colour = "rgb" + "(" + r + ", " + g + ", " + b + ")"; 
    arr.push(colour) 
}