在CoffeeScript中获取数组的最后一个元素

Lch*_*chi 20 arrays coffeescript

是否有快速(简短,明智的)方式来获取数组的最后一个元素(假设数组是非空的)?

我经常这样做:

last = array[array.length-1] 要么 last = array[-1..][0]

Sno*_*all 19

如果您使用的是现代版本的CoffeeScript,请不要使用它.请使用dule的答案.


如果你不介意修改数组,

last = array.pop()
Run Code Online (Sandbox Code Playgroud)

如果你不想修改数组,

last = array[..].pop()
Run Code Online (Sandbox Code Playgroud)

那就是编译last = array.slice(0).pop().我认为对于已经暴露给CoffeeScript或Python切片的人来说,这是非常易读的.但是,请记住它会比last = array[array.length-1]大型数组慢得多.

我不推荐last = array[-1..][0].这很简短,但我不认为它的含义是显而易见的.不过,这一切都是主观的.


Tre*_*ham 19

为此修改Array原型很简单,无害:

Array::last = -> @[@length - 1]
Run Code Online (Sandbox Code Playgroud)

如果你已经使用了优秀的Underscore.js,你可以使用它_.last(arr).


dul*_*ule 16

另一种选择是使用咖啡的解构:

[..., last] = array


Wil*_*iam 7

我喜欢dule的建议,原因如下:

我用'try coffeescript'测试了这种解构方法,这是一个在线咖啡,来自http://coffeescript.org/的 js编译器.

鉴于以下coffeescript:

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

[..., last] = arr
Run Code Online (Sandbox Code Playgroud)

它汇编成:

var arr, last;

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

last = arr[arr.length - 1];
Run Code Online (Sandbox Code Playgroud)

这非常理想.解构语法非常简洁明了.编译好的javascript是高效的.我认为没有理由不使用它.

(根据dule的回答,我没有足够的声誉将其作为评论发布,所以即使是评论,我也将其添加为答案.)