JS Objektide süntaks ja struktuur

JavaScripti objektid on andmestruktuurid, mis hoiavad seotud andmeid võtme- väärtuse paaridena. Võtmed on sõned, väärtused võivad olla mis tahes andmetüüpi.

Näited kasutusest:

  • E-kaubandus: toodete andmed (nimi, hind, laoseis)
  • Hotellid: broneeringud (klient, kuupäevad, tuba)
  • Autod: omadused (mark, mudel, värv)
  • Õpilased: info (nimi, vanus, hinded)

Levinud sisseehitatud objektid:

  • Math – matemaatilised funktsioonid ja konstandid.
  • Date – kuupäevad ja ajad.
  • Array – massiivid ja nende meetodid String – sõned ja nendega töötamine.
  • Object – kõikide objektide alus, objektide loomine ja haldamine.

Objekti loomine

Objekt koosneb võtme-väärtuse paaridest, kus võti on sõne ja väärtus võib olla mis tahes andmetüüp.

Näide:

let auto = {
  mark: "Mercedes",
  mudel: "S-klass",
  aasta: 2024,
  varv: "must",
  lisavarustus: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"]
};

Väljastamiseks trüki välja kogu objekt:

console.log(auto);

Iga objekti omadustele saab juurde pääseda, kasutades punktisüntaksit.

console.log(auto.mark); // Output: "Mercedes"
console.log(auto.mudel); // Output: "S-klass"
console.log(auto.aasta); // Output: 2024
console.log(auto.varv); // Output: "must"
console.log(auto.omadused); // Output: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"]

Objekti meetodid ja this kasutamine

JavaScripti objektid võivad sisaldada omadusi ja meetodeid.
Meetod on objekti funktsioon, mis saab kasutada objekti omadusi võtmesõna this abil.

Näiteks saab autole lisada meetodi, mis kuvab auto täisnime, viidates omadustele läbi this.

let auto = {
  //omadused
  mark: "Mercedes",
  mudel: "S-klass",
  aasta: 2025,
  varv: "sinine",
  omadused: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"],

  //meetodid
  taisnimi: function() {
    return this.mark + " " + this.mudel;
  }
};

console.log(auto.taisnimi());

Meetodi lühendamine

Uus Javascript ES6 lubab nüüd meetodi panna kirja ka lühemalt.

  //meetodid
  taisnimi() {
    return this.mark + " " + this.mudel;
  }

Kui omadused on massiivis, siis kasuta for või forEach tsüklit.

let auto = {
  //omadused

  mark: "Mercedes",
  mudel: "S-klass",
  aasta: 2025,
  varv: "sinine",
  omadused: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"],

  //meetodid
  taisnimi() {
    return this.mark + " " + this.mudel;
  },

  kuvaOmadused() {
    this.omadused.forEach(omadus => console.log(omadus));  
  }
};

auto.kuvaOmadused();

Objektide massiivid

Objektide massiiv JavaScriptis on indeksipõhine andmestruktuur, mis sisaldab mitut objekti.
Iga objekt koosneb võti-väärtuse paaridest ning võib sisaldada erinevat tüüpi andmeid (stringid, numbrid, tõeväärtused, funktsioonid jms).

Objektide massiivi loomine ja kuvamine

Objektide massiivi loomine on suhteliselt lihtne.
Alustame näiteks autode andmete salvestamisega. Iga auto on esindatud objektina, mis sisaldab teavet auto margi, mudeli ja tootmisaasta kohta.

let autod = [
  { mark: 'Mercedes', mudel: 'S-klass', aasta: 2025 },
  { mark: 'Honda', mudel: 'Civic', aasta: 2021 },
  { mark: 'Tesla', mudel: 'Model 3', aasta: 2019 }
];

console.log(autod);

Kui soovime näha konkreetse auto andmeid, saame viidata auto positsioonile massiivis (pidage meeles, et massiivide indekseerimine algab 0-st)

console.log(autod[0]);

Ja selles objektis saan elemendid kätte “punkti-süntaksiga”, nagu eespool

console.log(autod[0].mark);

Kõikide mudelite nägemiseks kasutame jällegi forEach tsüklit

autod.forEach((auto) => {
  console.log(`
    Mark: ${auto.mark},
    Mudel: ${auto.mudel},
    Aasta: ${auto.aasta}
    `);
});

Objekti massiivi meetodid

JavaScripti massiivide meetodid, nagu push(), pop(), shift(), unshift(), splice(), slice(), forEach(), map(), filter(), reduce(), sort() jne, töötavad nii tavaliste kui ka objektide massiividega.

Seda seetõttu, et massiivid on JavaScriptis objektid, ning nende meetodid toimivad ühtemoodi sõltumata sellest, kas massiiv sisaldab stringe, numbreid, objekte või teisi massiive.

Näiteks uute objektide lisamine objektide massiivi push ja unshift abil.

//Lisab uue objekti massiivi lõppu
autod.push({ mark: 'BMW', mudel: '666i', aasta: 2016 });
autod.unshift({ mark: 'Ford', mudel: 'Mustang', aasta: 2023 });

Meetod splice ühaegselt kustutab ja lisab.

massiiv.splice(
  {start indeks},
  {mitu eemaldada},
  {mida lisada}
);

Näiteks:

//Eemaldab esimese objekti
autod.splice(0,1);
//Lisab objekti alates teisest indeksist, ei kustutata midagi
autod.splice(1,0,{ mark: 'Toyota', mudel: 'Prius', aasta: 2025 });

Massiivist otsimine

Objektide massiivist otsimiseks kasutame find meetodit, mis tahab käivitamiseks funktsiooni. Kasutame noolfunktsiooni, kuna see lühem.

//Otsimine
let otsing = autod.find(auto => auto.aasta > 2020);
console.log(otsing);

Antud meetod leiab esimese vaste ja tagastab selle. Kui vastust ei leita, siis tuleb undefined. Mitme tingimuse seadmiseks kasuta && märke.

//Otsimine
let otsing = autod.find(auto => auto.aasta > 2020 && auto.mark === "Toyota");
console.log(otsing);

Massiivi filtreerimine

Kui otsing annab vaid ühe tulemuse, kasuta mitme tulemuse saamiseks filter-meetodit. See loob uue massiivi, kuhu jäävad vaid tingimusele vastavad elemendid.

Näiteks kõik paarisarvud.

let arvud = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const filtreeritud = arvud.filter(arv => arv % 2 === 0);
console.log(filtreeritud);

Autode puhul saame pöörduda näiteks auto.aasta poole ja filtreerida need, mis on vanemad kui 2020

//Filtreerimine
let filter = autod.filter(auto => auto.aasta < 2020);
console.log(filter);

Massiivi sorteerimine

Viimasena vaatleme sorteerimist meetodiga sort().
Tavaline sorteerimine objektide massiivi puhul ei tööta korrektselt, seetõttu tuleb kasutada võrdlusfunktsiooni.

autod.sort((a, b) => a.aasta - b.aasta);
console.log(autod);

Siin on (a, b) => a – b võrdlusfunktsioon, mis juhendab sort() meetodit järjestama numbreid nende tegelike arvväärtuste, mitte sõnerepresentatsioonide alusel.
Funktsioon a – b tagastab negatiivse väärtuse, kui a on väiksem kui b, positiivse, kui a on suurem, ja 0, kui need on võrdsed — just nii saabki sort() elemendid õigesse järjekorda panna.

Ülesanne

POLE VALMIS