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

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

Есть ли быстрый (короткий, характерный) способ получить последний элемент массива (если массив не пуст)?

Я обычно делаю:

last = array[array.length-1] или last = array[-1..][0]

4b9b3361

Ответ 1

Если вы используете современную версию CoffeeScript, не используйте это. Вместо этого используйте ответ вместо dule.


Если вы не возражаете против изменения массива,

last = array.pop()

Если вы не хотите, чтобы массив был изменен,

last = array[..].pop()

Это скомпилируется с last = array.slice(0).pop(). Я думаю, что это довольно читаемо для людей, уже подвергшихся воздействию кусочков CoffeeScript или Python. Однако имейте в виду, что он будет намного медленнее, чем last = array[array.length-1] для больших массивов.

Я бы не рекомендовал last = array[-1..][0]. Это коротко, но я не думаю, что его смысл сразу становится очевидным. Все это субъективно.

Ответ 2

Легко и безвредно модифицировать прототип Array для этого:

Array::last = -> @[@length - 1]

Если вы уже используете отличный Underscore.js, вы можете использовать его _.last(arr).

Ответ 3

Другой альтернативой является использование деструкции кофе:

[..., last] = array

Ответ 4

Мне нравится предложение дула, вот почему:

Я тестировал этот метод деструкции с помощью "try coffeescript", онлайн-кофе для компилятора js на http://coffeescript.org/.

С учетом следующего файла coffeescript:

arr = [1,2,3,4,5]

[..., last] = arr

Он компилируется в:

var arr, last;

arr = [1, 2, 3, 4, 5];

last = arr[arr.length - 1];

Это действительно идеально. Синтаксис деструкции достаточно ясен и краток. Скомпилированный javascript является перформативным. Я не вижу причин не использовать это.

(У меня недостаточно репутации, чтобы опубликовать это как комментарий в ответ на dule, поэтому я добавил его в качестве ответа, хотя это комментарий.)

Ответ 5

Или вы можете это сделать:

last = array[-1..]