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

Posted

技术标签:

【中文标题】在 CoffeeScript 中获取数组的最后一个元素【英文标题】:Getting the last element of an array in CoffeeScript 【发布时间】:2012-08-18 05:38:07 【问题描述】:

是否有一种快速(简短、符合字符的)方法来获取数组的最后一个元素(假设数组非空)?

我通常这样做:

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

【问题讨论】:

last = array.pop()last = arr.slice().pop() 如果您不想想从数组中删除该元素。 为了简洁的解决方案,我推荐last = (function (arr) return arr.splice(-1, 1)[0];).apply(null, [Array.prototype.slice.call(array, 0, array['length'])]); @Lchi 你想要数组最后一个值的副本,还是想要数组的最后一个元素,例如,如果你想修改它? @Snowball 我假设这有点 javascript 幽默。 只是最后一个元素(不是副本),不删除它。 【参考方案1】:

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


如果你不介意修改数组,

last = array.pop()

如果你不想修改数组,

last = array[..].pop()

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

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

【讨论】:

需要注意的是,array.slice(0).pop() 创建了一个全新的数组,只是为了获取最后一个元素。我会在下面提出dule的建议。 @HasFiveVowels:同意。当时,CoffeeScript 不支持这种语法。我已经更新了我的答案,以将未来的读者指向 dule 的答案。【参考方案2】:

为此修改Array原型既简单又无害:

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

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

【讨论】:

【参考方案3】:

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

[..., last] = array

【讨论】:

【参考方案4】:

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

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

鉴于以下咖啡脚本:

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

[..., last] = arr

编译成:

var arr, last;

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

last = arr[arr.length - 1];

这真的很理想。解构语法非常清晰简洁。编译后的 javascript 是高性能的。我认为没有理由不使用它。

(我没有足够的声誉将其作为评论发布在 dule 的答案下,因此即使它是评论,我也将其添加为答案。)

【讨论】:

【参考方案5】:

或者你可以这样做:

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

【讨论】:

您最后缺少 [0],如 last = array[-1..][0]。它还生成到slice(-1),这很慢。

以上是关于在 CoffeeScript 中获取数组的最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章

CoffeeScript 每次迭代都会向结果数组添加几个对象

在 JavaScript/CoffeeScript 中确定一个数组是不是包含另一个数组的内容

Coffeescript 类不返回函数的最后一个语句

从 CoffeeScript 中的数组中删除一个值

的CoffeeScript添加多个对象以产生阵列中的每个迭代

CoffeeScript:在函数调用中展开数组