2012-08-22 16 views
18

配列の最後の要素を取得するための簡単な方法がありますか(配列が空でないと仮定します)?CoffeeScriptで配列の最後の要素を取得する

私は通常の操作を行います。

last = array[array.length-1]またはlast = array[-1..][0]

+0

last = array.pop()またはlast = arr.slice()。pop() –

+0

簡潔な解決法については、私は 'last =(function(arr){return arr.splice(-1、1)[0];})を推奨します。apply(null、[Array.prototype。slice.call(配列、0、配列['長さ]])); '。 – Snowball

+0

@Lchi配列の最後の値のコピーを必要としますか?たとえば、配列を変更したい場合は配列の最後の要素を使用しますか? – jackwanders

答えて

19

あなたがCoffeeScriptの現代版を使用している場合、これを使用しないでください。代わりにduleの答えを使用してください。


あなたは、配列を変更したくない場合は、配列、

last = array.pop() 

を変更する気にしない場合は、

last = array[..].pop() 

last = array.slice(0).pop()にコンパイルされます。 CoffeeScriptやPythonのスライスに既に晒されている人には読みやすいと思います。ただし、大きな配列の場合は、last = array[array.length-1]よりもはるかに遅くなることに注意してください。

last = array[-1..][0]はおすすめしません。それは短いですが、私はその意味がすぐに分かるとは思いません。しかし、それはすべて主観的です。

+0

美しい、サー。 – frhd

+0

array.slice(0).pop()は、最後の要素を取得するために全く新しい配列を作成することに注意してください。私は下記のduleの提案をお勧めします。 – HasFiveVowels

+1

@HasFiveVowels:合意しました。当時、CoffeeScriptはその構文をサポートしていませんでした。私は将来の読者が代わりに答えてくれるように答えを更新しました。 – Snowball

16

それはこのためArrayプロトタイプを変更するのは簡単で無害だ:

Array::last = -> @[@length - 1] 

をすでに優れたUnderscore.jsを使用している場合は、その_.last(arr)を使用することができます。

14

別の方法としては、コーヒーの非構造を使用することです:私はJSに「CoffeeScriptのしてみてください」と、この非構造方法、オンラインコーヒーをテストし

[..., last] = array

5

私はここに、duleの提案を好きな理由ですコンパイラはhttp://coffeescript.org/です。これは本当に理想的です

var arr, last; 

arr = [1, 2, 3, 4, 5]; 

last = arr[arr.length - 1]; 

:それはにコンパイル

arr = [1,2,3,4,5] 

[..., last] = arr 

は次のCoffeeScriptを考えます。破壊構文は非常に明確かつ簡潔です。コンパイルされたjavascriptは実行可能です。私はこれを使わない理由はないと思う。

(私はduleの答えの下にコメントとしてこれを掲示するのに十分な評判を持っていないので、私はそれがコメントであっても答えとしてこれを追加しました。)

0

それとも、これを行うことができます:

last = array[-1..] 
を配列からその要素を削除したくない場合は、
関連する問題