Deo zbornika Napredni Javaskript

Destrukturiranje

Destrukturiranje je rastavljanje složene strukture na sastavne delove. U Javascriptu, pomoću operatora destrukturiranja (...) možemo raspakivati vrednosti iz objekata i nizova.

Destrukturiranje objekata

ES6 je uveo sintaksu koja značajno poboljšava način na koji pristupamo svojstvima objekta i članovima niza. Razmotrimo tipični primer:

const config = {
  server: 'localhost',
  port : ' 8080'
}
const server = config.server
const port = config.port

Ovde smo izvukli vrednosti server i port iz objekta config i dodelili ih konstantama. Međutim, kada objekat sadrži mnogo svojstava, ovu jednostavnu proceduru je zamorno pisati.

U sledećem primeru ćemo koristiti destrukturiranje da bi dodelili vrednosti objekta konstantama:

const config = {
  server: 'localhost',
  port: '8080',
  timeout: 900,
}
const {server, port} = config
console.log(server, port)

Kao što vidimo, server i port su konstante kojima su dodeljene pripadajuće vrednosti iz objekta config, zato što je naziv svojstava isti kao naziv konstante. Takođe, naziv konstante može biti različit od naziva atributa. Na primer, svojstvo port možemo dodeliti konstanti kapija:

const {port: kapija} = config
console.log(kapija)

Ako odredimo lokalnu promenljivu pomoću naziva svojstva koji ne postoji u objektu, ona dobija vrednost undefined. Međutim, možemo opciono da navedemo podrazumevanu vrednost:

const config = {
  server: 'localhost',
  port: '8080'
}
const {server, port, timeout = 100} = config
console.log(timeout)

Destrukturiranje nizova

Destrukturiranje se može primeniti i na nizove, a sintaksa je slična kao za objekte. Samo treba zagrade objekta da zamenimo zagradama niza:

const brojevi = [50, 20]
const [x, y] = brojevi
console.log(x, y)

Dodela se vrši prema redosledu članova niza. Međutim, možemo da preskočimo neke od članova:

const dani = ['Četvrtak', 'Petak', 'Subota', 'Nedelja']
const [,, sub, ned] = dani
console.log(sub, ned)

Takođe, možemo da koristimo operator ostatka (...) da bismo preostale elemente niza dodelili drugom nizu. Operator ostatka može da se koristi samo kao poslednji operator tokom destrukturiranja:

const [x, ...ostali] = [1, 2, 3, 4, 5]

console.log(ostali)

Literatura

  • Ved Antani, Stojan Stefanov, Objektno-orjentisan JavaScript, Beograd, 2017.