2016-09-30 7 views
0

免責事項:私はCoffeescriptを知らないのですが、ES6仕様に寄与しているとは思っています。範囲を使用してCoffeescriptループを有効にしてください。

このCoffeeScriptのループはjs2coffeeによると、これに相当

var active, i, page, ref; 

if (this.props.total > 1) { 
    for (page = i = 1, ref = this.props.total; 1 <= ref ? i <= ref : i >= ref; page = 1 <= ref ? ++i : --i) { 
    active = page === +this.props.current; 
    } 
} 

は、今私がいることを短くするfor..ofループを使用したいJS、

if @props.total>1 
    for page in [[email protected]] 
    active = (page is [email protected]) 

がある(他の誰かが書いた)JSしかし、私はどのように把握することはできません。

私はthis idea(下部にジェネレータ機能のビット)を実装しようとしましたが、それは正しくできません。

私の質問です:ES6で範囲を作る方法はありますか? JavaScriptでnから始まる長さkのシーケンシャルな整数の任意の範囲を生成するための

+0

'関数*リンク先の記事からrange'が動作するはずです(となし、範囲を実装するために、他の多くの方法がありません)になります。試したコードを正確に表示してください。 – Bergi

+0

単純な 'for(let page = 1; page Bergi

+0

...とにかく最後の比較に 'active'を設定した場合、ループを完全に省略することができます:-) – Bergi

答えて

0

次のように動作するはずです:

Array.apply(null, Array(k)).map((x, i) => i + n); 

ないかなり、CoffeeScriptの範囲の機能と同じで、ほとんどのために十分にそのおそらく近いながら使用する。また、かなり冗長であるにもかかわらず、1つの決定的な利点があります。.....のどちらかが排他的で包括的であることを覚えておく必要はありません。あなたが探している

1

発電ソリューションは、

function* range(i, end=Infinity) { 
    while (i <= end) { 
     yield i++; 
    } 
} 

// if (this.props.total > 1) - implicitly done by `range` 
for (let page of range(1, this.props.total) { 
    active = page === +this.props.current; 
} 
関連する問題