Есть ли быстрый (короткий, характерный) способ получить последний элемент массива (если массив не пуст)?
Я обычно делаю:
last = array[array.length-1]
или last = array[-1..][0]
Есть ли быстрый (короткий, характерный) способ получить последний элемент массива (если массив не пуст)?
Я обычно делаю:
last = array[array.length-1]
или last = array[-1..][0]
Если вы используете современную версию CoffeeScript, не используйте это. Вместо этого используйте ответ вместо dule.
Если вы не возражаете против изменения массива,
last = array.pop()
Если вы не хотите, чтобы массив был изменен,
last = array[..].pop()
Это скомпилируется с last = array.slice(0).pop()
. Я думаю, что это довольно читаемо для людей, уже подвергшихся воздействию кусочков CoffeeScript или Python. Однако имейте в виду, что он будет намного медленнее, чем last = array[array.length-1]
для больших массивов.
Я бы не рекомендовал last = array[-1..][0]
. Это коротко, но я не думаю, что его смысл сразу становится очевидным. Все это субъективно.
Легко и безвредно модифицировать прототип Array
для этого:
Array::last = -> @[@length - 1]
Если вы уже используете отличный Underscore.js, вы можете использовать его _.last(arr)
.
Другой альтернативой является использование деструкции кофе:
[..., last] = array
Мне нравится предложение дула, вот почему:
Я тестировал этот метод деструкции с помощью "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, поэтому я добавил его в качестве ответа, хотя это комментарий.)
Или вы можете это сделать:
last = array[-1..]