rev*_*ver 27 arrays coffeescript
如果说我有一个数组,我会迭代数组,但做一些与第一个和最后一个元素不同的东西.我该怎么办?
以下面的代码为例,如何提醒元素a和e?
array = [a,b,c,d,e]
for element in array
console.log(element)
Run Code Online (Sandbox Code Playgroud)
谢谢.
Jon*_*ier 57
您可以使用splat 使用数组解构来检索第一个和最后一个元素:
[first, ..., last] = array
Run Code Online (Sandbox Code Playgroud)
CoffeeScript> = 1.7.0支持此splat用法.
epi*_*ian 24
访问数组的第一个和最后一个元素的vanilla方式与JS中的相同:使用索引0和length - 1:
console.log array[0], array[array.length - 1]
Run Code Online (Sandbox Code Playgroud)
CoffeeScript允许你编写一些很好的数组解构表达式:
[first, mid..., last] = array
console.log first, last
Run Code Online (Sandbox Code Playgroud)
但是如果你不打算使用中间元素,我认为这不值得.
Underscore.js有一些帮助器first和last方法可以使它更像英语(我不想使用短语"自解释",因为我认为任何程序员都会理解数组索引).Array如果你不想使用Underscore并且你不介意污染全局命名空间(这是其他库,比如Sugar.js那样),它们很容易添加到对象中:
Array::first ?= (n) ->
if n? then @[0...(Math.max 0, n)] else @[0]
Array::last ?= (n) ->
if n? then @[(Math.max @length - n, 0)...] else @[@length - 1]
console.log array.first(), array.last()
Run Code Online (Sandbox Code Playgroud)
更新
此函数还允许您获取数组中的n个第一个或最后一个元素.如果您不需要该功能,那么实现将更简单(else基本上只是分支).
更新2
CoffeeScript > = 1.7允许你写:
[first, ..., last] = array
Run Code Online (Sandbox Code Playgroud)
不使用中间元素生成不必要的数组:D
小智 13
最短的路在这里
array[-1..]
看这个帖子
https://github.com/jashkenas/coffee-script/issues/156