webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
JavaScript · Lecția 9 din 17

Obiecte și destructuring

Shorthand, spread, destructuring, Object.entries și groupBy.

Actualizat

Ce este un obiect

Un obiect e o colecție de perechi cheie → valoare. Dacă un array răspunde la „care e al treilea element?”, un obiect răspunde la „care e numele? dar vârsta?”.

const user = {
  name: 'Ana',          // cheie: valoare
  age: 30,
  isAdmin: false,
  address: { city: 'Cluj' },          // valoare poate fi alt obiect
  greet() { return `Salut, ${this.name}` },  // sau funcție (metodă)
}

Obiectele descriu un lucru cu mai multe proprietăți: un user, un produs, o comandă, configurația unei componente, props-urile din React.

Array sau obiect?

Array Obiect
Acces după poziție ([0]) după nume (.name)
Ordine contează nu contează (practic)
Pentru liste de lucruri similare descrierea unui lucru / un dicționar
Exemplu products product

Cel mai des: array de obiecte — o listă de produse, fiecare produs fiind un obiect.

Crearea — sintaxe utile

const name = 'Ana'
const field = 'email'

const user = {
  name,                         // shorthand — echivalent cu name: name
  [field]: 'ana@x.ro',          // cheie calculată — cheia = valoarea lui field
  'full-name': 'Ana Pop',       // cheie cu caractere speciale — între ghilimele
}

Accesul — tipuri și când

Sintaxă Când Exemplu
obj.key cheia e fixă, știută user.name
obj[expr] cheia e într-o variabilă sau are caractere speciale user[field], obj['full-name']
obj?.key obiectul poate lipsi user?.address?.city
'key' in obj / Object.hasOwn(obj, 'key') verifici dacă cheia există diferă de „are valoare truthy”

Proprietate inexistentă → undefined (nu eroare). Eroare primești doar când citești ceva din undefined: undefined.city → TypeError. De aici ?..

Destructuring — scoți câmpurile în variabile

const { name, age } = user                       // două variabile
const { name: userName } = user                  // redenumire
const { role = 'user' } = user                   // valoare implicită
const { address: { city } } = user               // nested
const { password, ...safeUser } = user           // scoți o cheie, păstrezi restul

Cel mai des în parametri — exact cum arată props-urile unei componente:

function Card({ title, children, variant = 'default' }) { ... }

Spread — copiere și combinare

const updated = { ...user, age: 31 }           // copie + o cheie schimbată
const settings = { ...defaults, ...userPrefs } // ultima valoare pentru aceeași cheie câștigă

Spread face copie de suprafață — obiectele din interior rămân partajate. Detalii în Referințe și imutabilitate.

Iterarea unui obiect

Metodă Returnează
Object.keys(obj) ['name', 'age']
Object.values(obj) ['Ana', 30]
Object.entries(obj) [['name', 'Ana'], ['age', 30]]
Object.fromEntries(entries) inversul lui entries

Rețeta „transformă un obiect ca pe un array”:

const prices = { apple: 2, pear: 3 }
const doubled = Object.fromEntries(
  Object.entries(prices).map(([fruit, price]) => [fruit, price * 2]),
)

Grupare

Object.groupBy(products, p => p.category)
// { laptops: [...], accessories: [...] }

Obiect ca dicționar (lookup)

Când cauți des după un id, transformă array-ul într-un obiect (sau Map) — căutarea devine instantanee:

const byId = Object.fromEntries(users.map(u => [u.id, u]))
byId[42]   // în loc de users.find(u => u.id === 42) de fiecare dată

Pe scurt

  • Obiect = cheie → valoare; descrie un lucru.
  • .key pentru chei fixe, [expr] pentru chei dinamice, ?. când poate lipsi.
  • Destructuring scoate câmpuri, spread copiază și combină.
  • Object.entries + fromEntries pentru transformări.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.