6

配列内のエントリのすべてのペアを使用したい。length配列のプロパティを使用せずに CoffeeScript でこれを行う効果的な方法はありますか?

私は現在、次のようなことをしています:

# arr is an array
for i in [0...arr.length]
    first = arr[i]
    second = arr[++i]
4

1 に答える 1

15

CoffeeScript には、通常のループfor ... byのステップ サイズを調整する機能があります。forしたがって、2 のステップで配列を反復処理し、インデックスを使用して要素を取得します。

a = [ 1, 2, 3, 4 ]
for e, i in a by 2
    first  = a[i]
    second = a[i + 1]
    # Do interesting things here

デモ: http://jsfiddle.net/ambiguous/pvXdA/

必要に応じて、構造化されていない代入をループ内の配列スライスと組み合わせて使用​​できます。

a = [ 'a', 'b', 'c', 'd' ]
for e, i in a by 2
    [first, second] = a[i .. i + 1]
    #...

デモ: http://jsfiddle.net/ambiguous/DaMdV/

無視された変数をスキップして、範囲ループを使用することもできます。

# three dots, not two
for i in [0 ... a.length] by 2
    [first, second] = a[i .. i + 1]
    #...

デモ: http://jsfiddle.net/ambiguous/U4AC5/

これは、他のすべてのものと同様にループにコンパイルされるfor(i = 0; i < a.length; i += 2)ため、範囲によってコストがかかることはありません。</p>

于 2012-07-09T02:40:23.213 に答える