Objektide süntaks ja struktuur

Teooria

Javascripti objektid on võimsad andmestruktuurid, mis võimaldavad seotud andmeid ühtseks tervikuks organiseerida.


Neid kasutatakse igapäevaelus ja me võime neid kohata erineval viisil.

  • E-kaubandus – Veebipoodides kasutatakse objekte toodete esindamiseks, millel on omadused nagu nimi, hind, laoseis, kirjeldus, kategooria jne.
  • Hotelli broneeringud – Hotellid kasutavad objekte broneeringute esindamiseks, kus iga broneeringu objekt võib sisaldada andmeid nagu kliendi nimi, kuupäevad, toa tüüp, hinnaarvutused jne.
  • Autod – Iga auto võib olla objekt, millel on erinevad atribuudid nagu mark, mudel, värv, mootori maht, registrinumber jne.
  • Õpilased – Iga õpilane võiks olla objekt, millel on omadused nagu nimi, vanus, klass, hinded, osalemised, tegevused jne.

Objekti loomine

let auto = {
    mark: "Dodge",
    mudel: "Challenger",
    aasta: 2013,
    varv: "Sinine",
    omadused: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"]
};
console.log(auto);

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

console.log(auto.mark); // Output: "Dodge"
console.log(auto.mudel); // Output: "Challenger"
console.log(auto.aasta); // Output: 2013
console.log(auto.varv); // Output: "Sinine"
console.log(auto.omadused); // Output: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"]

Objekti meetodid ja this kasutamine

Objektid Javascriptis võivad sisaldada mitte ainult omadusi, vaid ka meetodeid. Meetodid on objekti funktsioonid, mis võivad manipuleerida objekti omadustega või teostada muid toiminguid objekti kontekstis. this võtmesõna kasutatakse meetodite sees, et viidata objektile, mille sees meetod on kutsutud.

let auto = {
    mark: "Dodge",
    mudel: "Challenger",
    aasta: 2013,
    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 = {
    mark: "Dodge",
    mudel: "Challenger",
    aasta: 2013,
    varv: "Sinine",
    omadused: ["kliimaseade", "elektriaknad", "navigatsioonisüsteem"],

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

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

Objektide massiivid

Objektide massiiv on JavaScriptis andmete struktuur, mis koosneb mitmest objektist, mis on järjestatud indeksi alusel.

  • Iga objekt on võti-väärtuse paaride kogum, kus võti on unikaalne ja väärtus on võti-väärtuse paari andmed.
  • Objektide massiiv võib sisaldada mitmesuguseid andmetüüpe, sealhulgas teksti (string), numbreid, tõeväärtusi (boolean), funktsioone, muid objekte jne.

Objektide massiivi loomine ja kuvamine

Iga auto on esindatud objektina, mis sisaldab teavet auto margi, mudeli ja tootmisaasta kohta.

let autod = [
  { mark: 'Dodge', mudel: 'Challenger', aasta: 2013},
  { mark: 'Fiat', mudel: '500e', aasta: 2015},
  { mark: 'KIA', mudel: 'EV9', aasta: 2024}
];

console.log(autod);

Kui vajate andmeid konkreetse auto kohta, tuleb kirjutada selle asukoht massiivis

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

let autod = [
    { mark: 'Dodge', mudel: 'Challenger', aasta: 2013},
    { mark: 'Fiat', mudel: '500e', aasta: 2015},
    { mark: 'KIA', mudel: 'EV9', aasta: 2024}
];


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

Objekti massiivi meetodid

JavaScripti massiivide meetodid on kasutatavad nii tavaliste massiivide kui ka objektide massiivide puhul. Sellised meetodid nagu push(), pop(), shift(), unshift(), splice(), slice(), forEach(), map(), filter(), reduce(), sort(), jne

let autod = [
    { mark: 'Dodge', mudel: 'Challenger', aasta: 2013},
    { mark: 'Fiat', mudel: '500e', aasta: 2015},
    { mark: 'KIA', mudel: 'EV9', aasta: 2024}
];

//Lisab uue objekti massiivi lõppu
autod.push({ mark: 'Lexus', mudel: 'LC', aasta: 2016 });
autod.unshift({ mark: 'Mercedes-Benz', mudel: 'E Class', aasta: 1996 });

Meetod splice ühaegselt kustutab ja lisab.

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

Massiivist otsimine

Objektide massiivis otsinguks tuleb kasutada meetodit find, mis nõuab käivitamiseks funktsiooni. Kasutame funktsiooni nool, see on lühem.

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

See meetod otsib esimest kokkulangevust ja tagastab selle. Kui vastust ei leita, kuvatakse undefined. Mitme tingimuse seadmiseks kasutatakse “&&”

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

Ei leitud, kuna ainus auto 2024 ei vasta parameetrile mark – Fiat

Massiivi filtreerimine

Selle asemel, et saada find abil ainult 1 tulemus, saab kasutada meetodit filter, et saada mitu vastust. Filter loob massiivi massiivist ja väljastab tingimustele vastavad elemendid.

Näide:

  • Oletame, et meil on numbrid ja me peame neist saama paarisnumbrid.
let arvud = [1, 11, 3, 4, 16, 6, 7, 19, 9, 20];

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

Kui kasutada näiteks autode puhul, võime pöörduda auto.aasta poole ja filtreerida need, mis on toodetud pärast 2019. aastat.

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

Massiivi sorteerimine

Meetod sort, lihtne objektide massiivi sorteerimine ei tööta korrektselt. Seetõttu on parem kasutada võrdlemiseks funktsiooni.

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

Siin on (a, b) => a – b võrdlusfunktsioon, mis ütleb sort()-ile, et järjestada numbrid nende tegelike numbri väärtuste, mitte stringiväärtuste järgi. Funktsioon ab tagastab negatiivse väärtuse, kui a on väiksem kui b, positiivse väärtuse, kui a on suurem kui b, ja 0, kui a ja b on võrdsed – just see, mida sort() vajab oma elementide õigesti järjestamiseks.

Ülesanne 

Raamatu objekt

let raamat = {
    pealkiri: "The Song of Achilles",
    autor: "Madeline Miller",
    aasta: 2021
};
  • Lisa meetod, mis kuvab raamatu kirjelduse.
vastus.innerHTML +="<h2>Ühe raamat</h2>";
vastus.innerHTML +="<p><strong>"+raamat.pealkiri + "</strong> – " + raamat.autor + " (" + raamat.aasta + ")</p>";
  • Lisa meetod, mis muudab väljaandmise aastat ja prindi tulemused konsooli.
function muudaAasta() {
    raamat.aasta = 2023;
    console.log("Uus aasta", raamat.aasta);
    return raamat.aasta;
}

muudaAasta();

Raamatukogu

  • Loo objekt raamatukogu, mille omaduseks on raamatud (massiiv raamatutest).
let raamatukogu =[
    {
        pealkiri: "Tõde ja õigus",
        autor: "A. H. Tammsaare",
        aasta: 1926
    },
    {
        pealkiri: "Rehepapp",
        autor: "Andrus Kivirähk",
        aasta: 2000
    },
    {
        pealkiri: "Minu Eesti",
        autor: "Epp Petrone",
        aasta: 2009
    }
];
console.log(raamatukogu);
  • Lisa meetod, mis kuvab kõik raamatud kenasti konsoolis.
raamatukogu.forEach(function(r) {
    vastus.innerHTML +="<p><strong>" + r.pealkiri + "</strong> – " + r.autor + " (" + r.aasta + ")</p>";
});
  • Lisa meetod, mis lisab uue raamatu.
function lisaRaamat() {
    raamatukogu.push({ pealkiri: "Minu raamat", autor: "Timur Basirov", aasta: 2024 });
    console.log("Lisatud minu raamat");
}
lisaRaamat();
  • Lisa meetod, mis kuvab raamatukogu raamatute koguarvu.
vastus.innerHTML +="<h2>Raamatukogus on "+raamatukogu.length+" raamatut</h2>";
  • Lisa meetod, mis arvutab, mitu raamatut on ilmunud pärast 2000. aastat.
function raamatudParast2000() {
    let uus = raamatukogu.filter(function(r) {
        return r.aasta > 2000;
    });
    return uus;
}

let filtritud = raamatudParast2000();

vastus.innerHTML += "<h2>Raamatud pärast 2000. aastat (" + filtritud.length + " tk)</h2>";
  • Koosta oma meetod ja kirjuta mida meetod tähendab
function otsiAutoriJargi(autorNimi){
    let leitud = raamatukogu.filter(function(r) {
        return r.autor === autorNimi;
    });
    console.log("Leitud autor:",autorNimi,leitud.length, "raamatut");
    vastus.innerHTML +="<h2>Otsing autorilt:"+ autorNimi +" ("+ leitud.length + " raamatut)</h2>";
    leitud.forEach(function(r) {
        vastus.innerHTML +="<p><strong>" + r.pealkiri + "</strong> – " + r.autor + " (" + r.aasta + ")</p>";
    });
}

otsiAutoriJargi("Timur Basirov");

https://timurbasirov23.thkit.ee/Objektid/Objektid.html