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

时间:2012-08-22 18:26:31

标签: arrays coffeescript

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

我通常会这样做:

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

5 个答案:

答案 0 :(得分: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]。这很简短,但我不认为它的含义是显而易见的。但这都是主观的。

答案 1 :(得分:18)

为此修改Array原型非常容易且无害:

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

如果您已使用优秀的Underscore.js,则可以使用其_.last(arr)

答案 2 :(得分:16)

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

[..., last] = array

答案 3 :(得分:7)

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

我使用'尝试coffeescript'来测试这种解构方法,这是enter image description here的js编译器的在线咖啡。

鉴于以下coffeescript:

var arr, last;

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

last = arr[arr.length - 1];

汇编成:

<table style="border:none;margin:0;padding:0;width:288px;-webkit-border-horizontal-spacing:0;">
  <tr style="padding:0;border:none;margin:0">
    <td style="padding:0;border:none;margin:0;width:288px;">
      <div style="width:288px;margin:0;padding:0;border:none;">xx</div>
    </td>
  </tr>
</table>

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

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

答案 4 :(得分:0)

或者你可以这样做:

last = array[-1..][0]