2016-02-12 20 views
16

ho trovato circa le operazioni di matrice JavaScript Unshift, spostamento, spinta, poptesta JavaScript e coda array senza mutazione

Tuttavia tutte queste operazioni mutano la matrice.

C'è un modo per utilizzare queste funzioni senza causare la mutazione dei dati originali?

In qualche modo ritengo che la lettura dei dati non dovrebbe causare la mutazione.

+0

Vuoi dire semplicemente accedendo gli indici? Mi piace 'var test = [1, 2, 3, 4]; var a = test [test.length - 1] 'dove' a' ora ha l'ultimo elemento? – JosephGarrone

+0

tail non è l'ultimo elemento. sì, gli indicizzatori sono facili. ma volevo codificare senza indicizzatori e accedere semplicemente a head/tail of array. –

+3

Cosa dovrebbe 'push' che non muta l'array? – JJJ

risposta

41

È possibile utilizzare:

var head = arr[0]; 
var tail = arr.slice(1); 

O in ES6:

const [head, ...tail] = arr; 
+1

Semplice e al punto :-) Grazie. – SagiSergeNadir

1

La risposta accettata è buono, ma per un approccio più funzionale:

capi

I' d usa find, che restituisce il primo elemento che restituisce un valore true-thy nel suo predicato.

Se sei sicuro che i valori sono veri-thy, si può scrivere come segue:

arr.find(Boolean) 

Se si desidera che il primo valore, indipendentemente dal suo valore, si può scrivere come segue:

arr.find(_ => true) 

Tails

Proprio come gli altri affermano, uso fetta

arr.slice(1); 
1

avrei fatto utilizzando ES6 come sopra

const head = ([h]) => h; 
const tail = ([, ...t]) => t; 

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

alert(head(arr));