配列があり、配列を反復処理するとしますが、最初と最後の要素とは異なることを行います。どうすればいいですか?
以下のコードを例にとると、要素aとeにアラートを出すにはどうすればよいですか?
array = [a,b,c,d,e]
for element in array
console.log(element)
ありがとう。
配列があり、配列を反復処理するとしますが、最初と最後の要素とは異なることを行います。どうすればいいですか?
以下のコードを例にとると、要素aとeにアラートを出すにはどうすればよいですか?
array = [a,b,c,d,e]
for element in array
console.log(element)
ありがとう。
スプラットを使用した配列の分割を使用して、最初と最後の要素を取得できます。
[first, ..., last] = array
このスプラットの使用法は、CoffeeScript >= 1.7.0 でサポートされています。
配列の最初と最後の要素にアクセスするバニラの方法は、実際にはJSの場合と同じです。つまり、インデックス0
とlength - 1
:を使用します。
console.log array[0], array[array.length - 1]
CoffeeScriptを使用すると、配列を破壊する優れた式を作成できます。
[first, mid..., last] = array
console.log first, last
しかし、中間の要素を使用しないのであれば、それだけの価値はないと思います。
Underscore.jsには、これをより英語に似たものにすることができるいくつかのヘルパーfirst
とlast
メソッドがあります(プログラマーなら誰でも配列の索引付けを理解できると思うので、「自明」というフレーズは使いたくありません)。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
Coffeescript の を使用して配列を反復処理すると、現在のelement
とを取得できます。次のコードを参照して、 andを実際のコードに置き換えてください。index
element
for...in
special_process_for_element
normal_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
ここに作業コードがあります