Gå til innhold

Objekter

Hva er et objekt?

En array lagrer en liste med verdier. Men hva om du vil lagre informasjon som hører sammen - for eksempel en persons navn, alder og by?

# Med separate variabler - rotete
person_navn = "Ola"
person_alder = 25
person_by = "Oslo"

# Med lister - uklart hva som er hva
person = ["Ola", 25, "Oslo"]   # Hva er index 1 igjen?
# Med separate variabler - rotete
var person_navn = "Ola"
var person_alder = 25
var person_by = "Oslo"

# Med arrays - uklart hva som er hva
var person = ["Ola", 25, "Oslo"]   # Hva er index 1 igjen?
// Med separate variabler - rotete
let personNavn = "Ola";
let personAlder = 25;
let personBy = "Oslo";

// Med arrays - uklart hva som er hva
let person = ["Ola", 25, "Oslo"];  // Hva er index 1 igjen?

Et objekt løser dette ved å lagre data som nøkkel-verdi-par:

person = {
    "navn": "Ola",
    "alder": 25,
    "by": "Oslo"
}
var person = {
    "navn": "Ola",
    "alder": 25,
    "by": "Oslo"
}
let person = {
    navn: "Ola",
    alder: 25,
    by: "Oslo"
};

Nå er det tydelig hva hver verdi betyr! I Python kalles dette en dictionary, og i GDScript en Dictionary.

Lage et objekt

bil = {
    "merke": "Toyota",
    "modell": "Yaris",
    "aar": 2020,
    "farge": "rød"
}
var bil = {
    "merke": "Toyota",
    "modell": "Yaris",
    "aar": 2020,
    "farge": "rød"
}
let bil = {
    merke: "Toyota",
    modell: "Yaris",
    aar: 2020,
    farge: "rød"
};
  • merke, modell, aar, farge er nøkler (egenskaper)
  • "Toyota", "Yaris", 2020, "rød" er verdier

Hente verdier

To måter å hente verdier på:

person = {
    "navn": "Ola",
    "alder": 25,
    "by": "Oslo"
}

# Bracket-notasjon (eneste måten)
person["navn"]  # "Ola"
person["by"]    # "Oslo"
var person = {
    "navn": "Ola",
    "alder": 25,
    "by": "Oslo"
}

# Punktnotasjon
person.navn     # "Ola"
person.alder    # 25

# Bracket-notasjon
person["navn"]  # "Ola"
person["by"]    # "Oslo"
let person = {
    navn: "Ola",
    alder: 25,
    by: "Oslo"
};

// Punktnotasjon (vanligst)
person.navn     // "Ola"
person.alder    // 25

// Bracket-notasjon
person["navn"]  // "Ola"
person["by"]    // "Oslo"

Endre og legge til

person = {
    "navn": "Ola",
    "alder": 25
}

# Endre en verdi
person["alder"] = 26

# Legge til ny nøkkel
person["by"] = "Bergen"

# person er nå: {'navn': 'Ola', 'alder': 26, 'by': 'Bergen'}
var person = {
    "navn": "Ola",
    "alder": 25
}

# Endre en verdi
person["alder"] = 26

# Legge til ny nøkkel
person["by"] = "Bergen"

# person er nå: {"navn": "Ola", "alder": 26, "by": "Bergen"}
let person = {
    navn: "Ola",
    alder: 25
};

// Endre en verdi
person.alder = 26;

// Legge til ny egenskap
person.by = "Bergen";

// person er nå: { navn: "Ola", alder: 26, by: "Bergen" }

Objekter i praksis

Objekter er perfekte for å representere ting fra virkeligheten:

# En elev
elev = {
    "fornavn": "Kari",
    "etternavn": "Hansen",
    "klasse": "1STB",
    "poeng": 85
}

print(f"{elev['fornavn']} fra {elev['klasse']} har {elev['poeng']} poeng")
# "Kari fra 1STB har 85 poeng"
# En elev
var elev = {
    "fornavn": "Kari",
    "etternavn": "Hansen",
    "klasse": "1STB",
    "poeng": 85
}

print("%s fra %s har %d poeng" % [elev.fornavn, elev.klasse, elev.poeng])
# "Kari fra 1STB har 85 poeng"
// En elev
let elev = {
    fornavn: "Kari",
    etternavn: "Hansen",
    klasse: "1STB",
    poeng: 85
};

console.log(`${elev.fornavn} fra ${elev.klasse} har ${elev.poeng} poeng`);
// "Kari fra 1STB har 85 poeng"

Arrays med objekter

Veldig vanlig kombinasjon - en liste med objekter:

elever = [
    {"navn": "Ola",  "poeng": 85},
    {"navn": "Kari", "poeng": 92},
    {"navn": "Per",  "poeng": 78}
]

# Hente ett objekt
elever[0]["navn"]    # "Ola"
elever[1]["poeng"]   # 92

# Gå gjennom alle
for elev in elever:
    print(f"{elev['navn']}: {elev['poeng']} poeng")
# Ola: 85 poeng
# Kari: 92 poeng
# Per: 78 poeng
var elever = [
    {"navn": "Ola",  "poeng": 85},
    {"navn": "Kari", "poeng": 92},
    {"navn": "Per",  "poeng": 78}
]

# Hente ett objekt
elever[0].navn     # "Ola"
elever[1].poeng    # 92

# Gå gjennom alle
for elev in elever:
    print("%s: %d poeng" % [elev.navn, elev.poeng])
# Ola: 85 poeng
# Kari: 92 poeng
# Per: 78 poeng
let elever = [
    { navn: "Ola", poeng: 85 },
    { navn: "Kari", poeng: 92 },
    { navn: "Per", poeng: 78 }
];

// Hente ett objekt
elever[0].navn     // "Ola"
elever[1].poeng    // 92

// Gå gjennom alle
for (let elev of elever) {
    console.log(`${elev.navn}: ${elev.poeng} poeng`);
}
// "Ola: 85 poeng"
// "Kari: 92 poeng"
// "Per: 78 poeng"

Referanse

Se JavaScript-referansen for mer om objekter, destructuring og spread-operatoren.

Eksempel: Enkel kontaktliste

kontakter = [
    {"navn": "Ola Nordmann", "telefon": "12345678", "epost": "ola@mail.no"},
    {"navn": "Kari Hansen",  "telefon": "87654321", "epost": "kari@mail.no"}
]

# Skrive ut alle kontakter
for kontakt in kontakter:
    print(kontakt["navn"])
    print("  Tlf: " + kontakt["telefon"])
    print("  E-post: " + kontakt["epost"])

# Legge til ny kontakt
kontakter.append({
    "navn": "Per Olsen",
    "telefon": "11223344",
    "epost": "per@mail.no"
})
var kontakter = [
    {"navn": "Ola Nordmann", "telefon": "12345678", "epost": "ola@mail.no"},
    {"navn": "Kari Hansen",  "telefon": "87654321", "epost": "kari@mail.no"}
]

# Skrive ut alle kontakter
for kontakt in kontakter:
    print(kontakt.navn)
    print("  Tlf: " + kontakt.telefon)
    print("  E-post: " + kontakt.epost)

# Legge til ny kontakt
kontakter.append({
    "navn": "Per Olsen",
    "telefon": "11223344",
    "epost": "per@mail.no"
})
let kontakter = [
    { navn: "Ola Nordmann", telefon: "12345678", epost: "ola@mail.no" },
    { navn: "Kari Hansen", telefon: "87654321", epost: "kari@mail.no" }
];

// Skrive ut alle kontakter
for (let kontakt of kontakter) {
    console.log(kontakt.navn);
    console.log("  Tlf: " + kontakt.telefon);
    console.log("  E-post: " + kontakt.epost);
}

// Legge til ny kontakt
kontakter.push({
    navn: "Per Olsen",
    telefon: "11223344",
    epost: "per@mail.no"
});