Подтвердить что ты не робот

Получение первого и последнего элемента массива в CoffeeScript

Если у меня есть массив, и я хотел бы перебирать массив, но делать что-то другое для первого и последнего элементов. Как мне это сделать?

Взяв приведенный ниже код в качестве примера, как мне предупредить элемент a и e?

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

Спасибо.

4b9b3361

Ответ 1

Вы можете получить первый и последний элементы с помощью массива destructuring с помощью знака:

[first, ..., last] = array

Это использование splat поддерживается в CoffeeScript >= 1.7.0.

Ответ 2

Ванильный способ доступа к первому и последнему элементу массива такой же, как и в 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

Ответ 4

Вы можете использовать только:

[..., last] = array

Ответ 5

Вы можете использовать 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]);

Ответ 6

Вы можете получить 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

образец

Здесь рабочий код