2012-08-22 13 views
18

Esiste un modo rapido (breve, caratteriale) per ottenere l'ultimo elemento di una matrice (presupponendo che la matrice non sia vuota)?Ottenere l'ultimo elemento di una matrice in CoffeeScript

faccio di solito:

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

+0

'last = array.pop()' o 'last = arr.slice(). Pop()' se * non * desidera rimuovere quell'elemento dall'array. –

+0

Per una soluzione succinta, raccomando 'last = (function (arr) {return arr.splice (-1, 1) [0];}). Apply (null, [Array.prototype.slice.call (array, 0, array ['length'])]); '. – Snowball

+0

@Lchi vuoi una copia dell'ultimo valore dell'array o vuoi l'ultimo elemento dell'array se, per esempio, vuoi modificarlo? – jackwanders

risposta

19

Se si utilizza una versione moderna di CoffeeScript, non usare questo. Utilizzare invece la risposta dule.


Se non ti dispiace di modificare l'array,

last = array.pop() 

Se non si desidera che l'array modificato,

last = array[..].pop() 

che compila last = array.slice(0).pop(). Penso che sia abbastanza leggibile per le persone già esposte alle sezioni CoffeeScript o Python. Tuttavia, tieni presente che sarà molto più lento di last = array[array.length-1] per i grandi array.

Non consiglio last = array[-1..][0]. È breve, ma non penso che il suo significato sia immediatamente ovvio. È tutto soggettivo, però.

+0

Bello, signore. – frhd

+0

Va notato che array.slice (0) .pop() crea un array completamente nuovo, solo per ottenere l'ultimo elemento. Suggerirei il suggerimento di dule qui sotto. – HasFiveVowels

+1

@HasFiveVowels: concordato. Al momento, CoffeeScript non supportava quella sintassi. Ho aggiornato la mia risposta per indirizzare invece i futuri lettori alla risposta di dule. – Snowball

16

E 'facile e innocuo per modificare il prototipo Array per questo:

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

Se stai già utilizzando l'eccellente Underscore.js, è possibile utilizzare la sua _.last(arr).

14

Un'altra alternativa è quella di utilizzare destrutturazione del caffè:

[..., last] = array

5

mi piace il suggerimento di Dule, ecco perché:

Ho provato questo metodo di destrutturazione con 'provare CoffeeScript', un caffè online per js compilatore allo http://coffeescript.org/.

Dati i seguenti CoffeeScript:

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

[..., last] = arr 

Si compila in:

var arr, last; 

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

last = arr[arr.length - 1]; 

Questo è davvero l'ideale. La sintassi destrutturante è abbastanza chiara e concisa. Il javascript compilato è performante. Non vedo alcun motivo per non usarlo.

(non ho abbastanza reputazione per pubblicare questo come un commento sotto la risposta di Dule, così ho aggiunto come una risposta, anche se si tratta di un commento.)

0

Oppure si potrebbe fare questo:

last = array[-1..] 
Problemi correlati