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 restulCel 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.
.keypentru chei fixe,[expr]pentru chei dinamice,?.când poate lipsi.- Destructuring scoate câmpuri, spread copiază și combină.
Object.entries+fromEntriespentru transformări.