3

これは私のコードで、次のように動作しますmyArray:

var myArray = [];
var i;

for(i = 0; i < 20; i += 1) {
   myArray.push(Math.random());
}

ダミー変数なしで機能する上記と同等の機能はありますiか?

お気に入りの回答:

  • while(myArray.push(Math.random()) < 20);
  • $.map(Array(20), Math.random);
  • for(var myArray = []; myArray.push(Math.random()) < 20;);
4

5 に答える 5

4

ES5ではなく、マップを適用するために20の量を持つものを持たなければならないので、それに相当する実際の機能はありません...

var my20ElementArray = [0,1,2,3,4,5,6,7,8,9,10];
var myArray = my20ElementArray.map(Math.random);

Python にあるxrange のような関数を作成することはできますが、それはこの「未使用」変数を関数内に隠すだけです。

于 2012-08-04T12:50:13.093 に答える
3

JavaScript 1.7 では、このタスクに配列内包表記を使用できます。

var myArray = [Math.random() for each (i in range(0, 20))];

ただし、ES5.1 では、Arrayコンストラクターを使用して任意の長さの配列を生成し、それを乱数にマップすることができます。唯一の欠点は、map()初期化されていない値では機能しないことです。そのため、最初に and を使用して空の文字列の配列を生成しjoinますsplit

var myArray = new Array(20).join(" ").split(" ").map(Math.random);

醜いが短い。「 JavaScript での範囲の作成 - 奇妙な構文」からのおそらくより良い (しかしあまり理解できない) アイデア:

var myArray = Array.apply(null, {length: 20}).map(Math.random);

i@FelixKlings コメントから始めて、ループ変数なしでこのワンライナーを使用することもできます。

for (var myArray=[]; myArray.push(Math.random()) < 20;);
// much better:
for (var myArray=[]; myArray.length < 20;) myArray.push(Math.random());
于 2012-08-04T12:59:40.953 に答える
1

これはどう?

それは機能的なスタイルであり、非常に簡潔です。

var makeRandomArray = function(n){
    if (n == 0) return [];
    return [Math.random()].concat(makeRandomArray(n-1));
};

console.log(makeRandomArray(20))

http://jsfiddle.net/YQqGP/

</ p>

于 2012-08-05T11:23:28.047 に答える
1

次のようなものを探していますか?

function makeArray(length, def) {
    var array = [];
    var funct = typeof def === "function";
    while (array.push(funct ? def() : def) < length);
    return array;
}

次に、次のように配列を作成できます。

var array = makeArray(100); // an array of 100 elements
var zero = makeArray(5, 0); // an array of 5 `0`s

あなたの場合、次のようなことができます:

var myArray = makeArray(20, Math.random);

次のフィドルを参照してください: http://jsfiddle.net/WxtkF/3/

于 2012-08-04T12:58:06.740 に答える
0

あなたは試すことができます:

var myArray = String(Array(20)).split(',')
               .map( () => Math.random() );

または、Array プロトタイプを次のように拡張します。

Array.prototype.vector = function(n,fn){
  fn = fn || function(){return '0';};
  while (n--){
    this.push(fn());
  }
  return this;
}
// usage
var myArray = [].vector(20, () => Math.random());

または何か面白いことを試してください:

var myArray = function a(n,fn){
  return n ? a(n-1,fn).concat(fn()) : [];
}(20, () => Math.random())

またはArray.from (ES>=2015)を使用します

Array.from({length: 20}).map(() => Math.random())
于 2012-08-04T13:11:53.520 に答える