2012-08-22 114 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(array,0,array ['length'])]);'。 – 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()會創建一個全新的數組,以獲取最後一個元素。我會在下面建議杜爾的建議。 – HasFiveVowels

+1

@HasFiveVowels:同意。那時,CoffeeScript不支持這種語法。我已經更新了我的答案,以指向未來的讀者而不是Dule的答案。 – Snowball

16

這很容易和無害修改Array原型:如果您已經使用了優秀的Underscore.js

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

,你可以用它_.last(arr)

14

另一種方法是用咖啡的解構:

[..., last] = array

5

我喜歡獨樂的建議,這是爲什麼:

我「嘗試的CoffeeScript」測試這種解構方法,網上咖啡JS編譯器在http://coffeescript.org/

鑑於以下的CoffeeScript:

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

[..., last] = arr 

它編譯成:

var arr, last; 

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

last = arr[arr.length - 1]; 

這確實是理想的。解構語法非常清晰簡潔。編譯後的JavaScript是高性能的。我沒有理由不使用這個。

(我沒有足夠的聲譽張貼此爲下獨樂的回答評論,所以我增加了它,即使它是一個評論的答案。)

0

或者你可以這樣做:

last = array[-1..] 
相關問題