如果说我有一个数组,我会迭代数组,但做一些与第一个和最后一个元素不同的东西。我该怎么办?
以下面的代码为例,如何提醒元素 a 和 e ?
array = [a,b,c,d,e]
for element in array
console.log(element)
感谢。
答案 0 :(得分:56)
您可以使用带有splat的数组destructuring检索第一个和最后一个元素:
[first, ..., last] = array
CoffeeScript> = 1.7.0支持此splat用法。
答案 1 :(得分:24)
访问数组的第一个和最后一个元素的vanilla方式实际上与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
方法可以使这更像英语(我不想使用“自我解释”这个短语,因为我认为任何程序员都会理解数组索引)。如果您不想使用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...in
和special_process_for_element
替换为您的代码。
normal_process_for_element
这里是working code