2012-08-22 9 views
18

¿Existe una manera rápida (breve, sabia) de obtener el último elemento de una matriz (suponiendo que la matriz no esté vacía)?Obteniendo el último elemento de una matriz en CoffeeScript

por lo general lo hago:

last = array[array.length-1] o last = array[-1..][0]

+0

'last = array.pop()' o 'last = arr.slice(). Pop()' si * no * desea eliminar ese elemento de la matriz. –

+0

Para una solución sucinta, recomiendo 'last = (function (arr) {return arr.splice (-1, 1) [0];}) apply (null, [Array.prototype.slice.call (array, 0, array ['length'])]); '. – Snowball

+0

@Lchi ¿desea una copia del último valor de la matriz o desea el último elemento de la matriz si, por ejemplo, desea modificarla? – jackwanders

Respuesta

19

Si está utilizando una versión moderna de CoffeeScript, no utilice este. Utilice la respuesta por dule en su lugar.


Si no le importa modificar la matriz,

last = array.pop() 

Si no desea que la matriz modificada,

last = array[..].pop() 

que compila a last = array.slice(0).pop(). Creo que es bastante legible para personas ya expuestas a CoffeeScript o Python. Sin embargo, tenga en cuenta que será mucho más lento que last = array[array.length-1] para arreglos grandes.

No recomendaría last = array[-1..][0]. Es corto, pero no creo que su significado sea inmediatamente obvio. Sin embargo, es todo subjetivo.

+0

Hermoso, señor. – frhd

+0

Debe tenerse en cuenta que array.slice (0) .pop() crea una matriz completamente nueva, solo para obtener el último elemento. Sugeriría la sugerencia de dule a continuación. – HasFiveVowels

+1

@HasFiveVowels: De acuerdo. En ese momento, CoffeeScript no admitía esa sintaxis. He actualizado mi respuesta para señalar a los lectores futuros a la respuesta de dule en su lugar. – Snowball

16

Es fácil e inofensivo para modificar el prototipo Array para esto:

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

Si ya está utilizando la excelente Underscore.js, puede utilizar su _.last(arr).

14

Otra alternativa es el uso de desestructuración de café:

[..., last] = array

5

Me gusta la sugerencia de dule, aquí es por qué:

He probado este método desestructuración con 'tratar CoffeeScript', un café en línea para js compilador al http://coffeescript.org/.

Dada la siguiente CoffeeScript:

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

[..., last] = arr 

Se compila en:

var arr, last; 

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

last = arr[arr.length - 1]; 

Esto es realmente ideal. La sintaxis de desestructuración es bastante clara y concisa. El javascript compilado es perfecto. No veo ninguna razón para no usar esto.

(no tengo la reputación suficiente para publicar esto como un comentario a la respuesta de dule, por lo que añade como una respuesta a pesar de que es un comentario.)

0

O usted podría hacer esto:

last = array[-1..] 
Cuestiones relacionadas