de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 John
John
質問

coffeescriptのループを減らす

私は、次のようなcoffeescriptで増分forループを行う方法を知っています:

Coffeescript:

for some in something

生成されたJavascript:

for (_i = 0, _len = something.length; _i < _len; _i++)

どのように私はCoffeescriptでこれに似たfor減少ループを作成するのですか?

for (var i = something.length-1; i >= 0; i--)
28 2011-10-27T18:55:46+00:00 6
プログラミング
loops
for-loop
coffeescript
decrement
Trevor Burnham
27日 10月 2011 в 7:06
2011-10-27T19:06:20+00:00
さらに
ソース
編集
#56791726

編集:CoffeeScript 1.5の時点で、 -1での構文がサポートされています。

まず、ステップを指定できる by キーワードを理解しておく必要があります。次に、CoffeeScriptコンパイラがエンドポイントをループするための非常に単純なアプローチを取っていることを理解する必要があります(問題1187 を参照してください)。

for some in something by -1 # don't do this!!!

無限ループになります。これはインデックス0から開始し、インデックスを-1だけ増やし、インデックスが something.length に達するまで待機します。一口。

したがって、範囲ループ構文を代わりに使用する必要があります。これにより、エンドポイントを自分で指定することができますが、ループ項目を自分で取得する必要があります。

for i in [something.length - 1..0] by -1
  some = something[i]

明らかに、それはかなり面倒です。したがって、代わりに something.reverse()を繰り返し行うことを強く検討する必要があります。 reverse()は、あなたが呼び出す配列を変更することを覚えておいてください!配列を保持しながらそれを逆方向に繰り返したい場合は、それをコピーする必要があります:

for some in something.slice(0).reverse()
50
0
Evan Moran
1日 4月 2013 в 5:07
2013-04-01T17:07:05+00:00
さらに
ソース
編集
#56791728

コーヒースクリプト 1.5.0 以降、これがサポートされています:

for item in list by -1
  console.log item

これは

var item, _i;
for (_i = list.length - 1; _i >= 0; _i += -1) {
  item = list[_i];
  console.log(item);
}
38
0
Ricardo Tomasi
29日 10月 2011 в 3:34
2011-10-29T03:34:29+00:00
さらに
ソース
編集
#56791727

記録のためだけに別のテイク:

i = something.length
while item = something[--i]
  #use item

(偽の値を破ります)

2
0
Blender
27日 10月 2011 в 7:01
2011-10-27T19:01:41+00:00
さらに
ソース
編集
#56791725

逆にループするエレガントな方法はないようです。

I checked the GitHub ticket regarding this, but it has been closed: https://github.com/jashkenas/coffee-script/issues/1187

以前の構文は次のとおりです。

for some in something by -1

しかし、最近のバージョンでは削除されています。 編集:それは今動作する(編集の1.6.2 @時間)

1
0
Jacob Oscarson
27日 10月 2011 в 7:01
2011-10-27T19:01:01+00:00
さらに
ソース
編集
#56791724

慣用的な方法(ドキュメントから):

lst = ['a', 'b', 'c']
for n in (num for num in [lst.length-1..0])
  alert lst[n]

(Trevorの注釈の後に編集)

編集:

パフォーマンスが重要な場合は、これと同等ですが、それほど美的ではないスニペットでは、結果として生じるjavascriptが少なくなります。

lst = [1,2,3]
i = lst.length
alert lst[i] while i--
0
0
yndolok
3日 2月 2015 в 9:35
2015-02-03T21:35:28+00:00
さらに
ソース
編集
#56791729

減少する索引ベースのforループの場合は、次のものを使用できます。

for i in [0...something.length].reverse()

これは、厄介さを取り除く@TrevorBurnhamは、あなた自身でエンドポイントを指定する際の問題です。

something.length が 0 の場合、これは

for i in []
0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 1週間前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 2週間前
KO
RU
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属