Ответ 1
Вы можете получить первый и последний элементы с помощью массива destructuring с помощью знака:
[first, ..., last] = array
Это использование splat поддерживается в CoffeeScript >= 1.7.0.
Если у меня есть массив, и я хотел бы перебирать массив, но делать что-то другое для первого и последнего элементов. Как мне это сделать?
Взяв приведенный ниже код в качестве примера, как мне предупредить элемент a и e?
array = [a,b,c,d,e]
for element in array
console.log(element)
Спасибо.
Вы можете получить первый и последний элементы с помощью массива destructuring с помощью знака:
[first, ..., last] = array
Это использование splat поддерживается в CoffeeScript >= 1.7.0.
Ванильный способ доступа к первому и последнему элементу массива такой же, как и в 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, do):
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]);
Вы можете получить element
и index
текущего element
при итерации по массиву с помощью Coffeescript 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
Здесь рабочий код