如果说我有一个数组,我会遍历数组,但对第一个和最后一个元素做一些不同的事情。我该怎么做?
以下面的代码为例,如何提醒元素a和e?
array = [a,b,c,d,e]
for element in array
console.log(element)
谢谢。
如果说我有一个数组,我会遍历数组,但对第一个和最后一个元素做一些不同的事情。我该怎么做?
以下面的代码为例,如何提醒元素a和e?
array = [a,b,c,d,e]
for element in array
console.log(element)
谢谢。
访问数组的第一个和最后一个元素的原始方式与 JS 中的相同:使用索引0
和length - 1
:
console.log array[0], array[array.length - 1]
CoffeeScript 让您可以编写一些不错的数组解构表达式:
[first, mid..., last] = array
console.log first, last
但如果你不打算使用中间元素,我认为这是不值得的。
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()
更新
此函数还允许您获取数组中的第n个或最后一个元素。如果您不需要该功能,那么实现会简单得多(else
基本上只是分支)。
更新 2
CoffeeScript >= 1.7允许您编写:
[first, ..., last] = array
无需使用中间元素生成不必要的数组:D
最短的方法在这里
array[-1..]
查看此线程
https://github.com/jashkenas/coffee-script/issues/156
您可以只使用:
[..., last] = array
您可以使用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]);
使用 Coffeescript 的 遍历数组时,您可以获取当前的element
和。请参阅以下代码,将and替换为您的代码。index
element
for...in
special_process_for_element
normal_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
这是一个工作代码