27

配列があり、配列を反復処理するとしますが、最初と最後の要素とは異なることを行います。どうすればいいですか?

以下のコードを例にとると、要素aeにアラートを出すにはどうすればよいですか?

array = [a,b,c,d,e]
for element in array
  console.log(element)

ありがとう。

4

6 に答える 6

58

スプラットを使用した配列の分割を使用して、最初と最後の要素を取得できます。

[first, ..., last] = array

このスプラットの使用法は、CoffeeScript >= 1.7.0 でサポートされています。

于 2012-07-18T03:03:23.970 に答える
24

配列の最初と最後の要素にアクセスするバニラの方法は、実際にはJSの場合と同じです。つまり、インデックス0length - 1:を使用します。

console.log array[0], array[array.length - 1]

CoffeeScriptを使用すると、配列を破壊する優れた式を作成できます。

[first, mid..., last] = array
console.log first, last

しかし、中間の要素を使用しないのであれば、それだけの価値はないと思います。

Underscore.jsには、これをより英語に似たものにすることができるいくつかのヘルパーfirstlastメソッドがあります(プログラマーなら誰でも配列の索引付けを理解できると思うので、「自明」というフレーズは使いたくありません)。Arrayアンダースコアを使用せず、グローバル名前空間を汚染してもかまわない場合は、オブジェクトに簡単に追加できます(これは、 Sugar.jsなどの他のライブラリが行うことです)。

Array::first ?= (n) ->
  if n? then @[0...(Math.max 0, n)] else @[0]

Array::last ?= (n) ->
  if n? then @[(Math.max @length - n, 0)...] else @[@length - 1]

console.log array.first(), array.last()

アップデート

この関数を使用すると、配列の最初または最後のn個の要素を取得することもできます。その機能が必要ない場合は、実装がはるかに簡単になります(else基本的にはブランチのみ)。

アップデート2

CoffeeScript > = 1.7では、次のように記述できます。

[first, ..., last] = array

真ん中の要素で不要な配列を生成せずに:D

于 2012-07-18T03:11:05.353 に答える
2

Coffeescript の を使用して配列を反復処理すると、現在のelementとを取得できます。次のコードを参照して、 andを実際のコードに置き換えてください。indexelementfor...inspecial_process_for_elementnormal_process_for_element

array = [a, b, c, d]
FIRST_INDEX = 0
LAST_INDEX = array.length - 1

for element, index in array
    switch index
        when FIRST_INDEX, LAST_INDEX
            special_process_for_element
        else
            normal_process_for_element

サンプル

ここに作業コードがあります

于 2012-07-18T03:14:19.180 に答える