1. ホーム
  2. javascript

[解決済み] n回繰り返す」のイディオム?

2022-02-18 19:19:44

質問

JSで3つの乱数の配列を生成する、やや無駄で非実用的な方法を紹介します。

[1, 1, 1].map(Math.random) // Outputs: [0.63244645928, 0.59692098067, 0.73627558014]

ダミー配列の使用(例. [1, 1, 1] を呼び出すことができます。 map は、 -- 十分に大きな n -- メモリの無駄遣いであり、現実的ではありません。

人が望むのは、仮説のようなものでしょう。

repeat(3, Math.random) // Outputs: [0.214259553965, 0.002260502324, 0.452618881464]

バニラ・ジャパニーズでできる一番近いことは何だろう?

Underscoreのようなライブラリは知っていますが、ここではライブラリは避けたいと思っています。

の回答を見てみました。 文字列を何度も繰り返す が、一般には適用できない。例)。

Array(3).map(Math.random) // Outputs: [undefined, undefined, undefined]
Array(4).join(Math.random()) // Outputs a concatenation of a repeated number
Array(3).fill(Math.random()) // Fills with the same number

他のいくつかの回答は、組み込みクラスを修正することを提案しています。

どのように解決するのですか?

Underscore.jsには 関数は、まさにあなたが望むことをやってくれます。

_.times(3, Math.random)

Underscoreを使いたくない場合は、自分で times 関数(Underscoreのソースからコピーして少し簡略化したもの)です。

times = function(n, iterator) {
  var accum = Array(Math.max(0, n));
  for (var i = 0; i < n; i++) accum[i] = iterator.call();
  return accum;
};