在 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 中确定一个数组是不是包含另一个数组的内容