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

时间:2012-07-18 02:39:26

标签: arrays coffeescript

如果说我有一个数组,我会迭代数组,但做一些与第一个和最后一个元素不同的东西。我该怎么办?

以下面的代码为例,如何提醒元素 a e

array = [a,b,c,d,e]
for element in array
  console.log(element)

感谢。

6 个答案:

答案 0 :(得分:56)

您可以使用带有splat的数组destructuring检索第一个和最后一个元素:

[first, ..., last] = array

CoffeeScript> = 1.7.0支持此splat用法。

答案 1 :(得分:24)

访问数组的第一个和最后一个元素的vanilla方式实际上与JS相同:使用索引0length - 1

console.log array[0], array[array.length - 1]

CoffeeScript允许你编写一些很好的数组解构表达式:

[first, mid..., last] = array
console.log first, last

但如果您不打算使用中间元素,我认为这不值得。

Underscore.js有一些助手firstlast方法可以使这更像英语(我不想使用“自我解释”这个短语,因为我认为任何程序员都会理解数组索引)。如果您不想使用Underscore,并且您不介意污染全局命名空间(这是其他库,如Sugar.js),它们很容易添加到Array对象中:< / p>

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()

<强>更新

此功能还允许您获取 n 数组中的第一个或最后一个元素。如果您不需要该功能,那么实现将更加简单(基本上只是else分支)。

更新2

CoffeeScript >= 1.7可让您写下:

[first, ..., last] = array

不使用中间元素生成不必要的数组:D

答案 2 :(得分:14)

最短路在这里 array[-1..]
见这个帖子
https://github.com/jashkenas/coffee-script/issues/156

答案 3 :(得分:6)

您可以使用:

[..., last] = array

答案 4 :(得分:4)

您可以使用slice获取最后一个元素。在javascript中,slice可以传递负数,如-1作为参数。

例如:

array = [1, 2, 3 ]
console.log "first: #{array[0]}"
console.log "last: #{array[-1..][0]}"

编译成

var array;
array = [1, 2, 3];
console.log("first: " + array[0]);
console.log("last: " + array.slice(-1)[0]);

答案 5 :(得分:2)

使用Coffeescript的element迭代数组时,您可以获得当前index的{​​{1}}和element。请参阅以下代码,将for...inspecial_process_for_element替换为您的代码。

normal_process_for_element

sample

这里是working code