回答:2015年12月9日
個人的に、私は受け入れられた答えを簡潔(良い)と簡潔(悪い)の両方で見つけました。この発言は主観的なものになる可能性があるため、この回答を読んで同意するかどうかを確認してください。
質問の例は、Rubyのようなものでした。
x.times do |i|
do_stuff(i)
end
JSで以下を使用してこれを表現すると、以下が許可されます。
times(x)(doStuff(i));
これがコードです:
let times = (n) => {
return (f) => {
Array(n).fill().map((_, i) => f(i));
};
};
それでおしまい!
簡単な使用例:
let cheer = () => console.log('Hip hip hooray!');
times(3)(cheer);
//Hip hip hooray!
//Hip hip hooray!
//Hip hip hooray!
または、受け入れられた回答の例に従ってください。
let doStuff = (i) => console.log(i, ' hi'),
once = times(1),
twice = times(2),
thrice = times(3);
once(doStuff);
//0 ' hi'
twice(doStuff);
//0 ' hi'
//1 ' hi'
thrice(doStuff);
//0 ' hi'
//1 ' hi'
//2 ' hi'
付記-範囲関数の定義
基本的に非常によく似たコード構造を使用する同様の/関連する質問は、(コア)JavaScriptに便利なRange関数があり、アンダースコアのrange関数に似ているかもしれません。
xから始まるn個の数値を持つ配列を作成します
下線
_.range(x, x + n)
ES2015
いくつかの選択肢:
Array(n).fill().map((_, i) => x + i)
Array.from(Array(n), (_, i) => x + i)
n = 10、x = 1を使用したデモ:
> Array(10).fill().map((_, i) => i + 1)
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
> Array.from(Array(10), (_, i) => i + 1)
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
私が実行した簡単なテストでは、上記のそれぞれがソリューションとdoStuff関数を使用して100万回実行され、前のアプローチ(Array(n).fill())はわずかに高速でした。