27

如果说我有一个数组,我会遍历数组,但对第一个和最后一个元素做一些不同的事情。我该怎么做?

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

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

谢谢。

4

6 回答 6

58

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

[first, ..., last] = array

CoffeeScript >= 1.7.0 支持这种 splat 用法。

于 2012-07-18T03:03:23.970 回答
24

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

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

CoffeeScript 让您可以编写一些不错的数组解构表达式:

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

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

Underscore.js 有一些帮助器firstlast方法可以使它更像英语(我不想使用“不言自明”这个短语,因为我认为任何程序员都会理解数组索引)。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()

更新

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

更新 2

CoffeeScript >= 1.7允许您编写:

[first, ..., last] = array

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

于 2012-07-18T03:11:05.353 回答
13

最短的方法在这里
array[-1..]
查看此线程
https://github.com/jashkenas/coffee-script/issues/156

于 2014-02-18T09:56:06.187 回答
6

您可以只使用:

[..., last] = array
于 2015-01-15T14:46:56.187 回答
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]);
于 2013-06-14T08:29:58.380 回答
2

使用 Coffeescript 的 遍历数组时,您可以获取当前的element和。请参阅以下代码,将and替换为您的代码。indexelementfor...inspecial_process_for_elementnormal_process_for_element

array = [a, b, c, d]
FIRST_INDEX = 0
LAST_INDEX = array.length - 1

for element, index in array
    switch index
        when FIRST_INDEX, LAST_INDEX
            special_process_for_element
        else
            normal_process_for_element

样本

这是一个工作代码

于 2012-07-18T03:14:19.180 回答