Objects 🗂️

Der letzte composite Datentyp, den wir uns anschauen, sind Objekte / Objects.

Bisher konnten wir in Variablen oder in Arrays immer nur einzelne Strings, Numbers oder Booleans benutzen. Manchmal möchte man aber mehrere solcher Werte als ein Paket behandeln. Stell dir vor, du willst Daten über eine Person speichern: ihr Alter, ihren Namen und ihre Größe in cm. Bisher müsstest du das so tun:

const age = 42
const name = "Lara Smith"
const height = 162

Wenn man jetzt mehrere solcher Personen abspeichern und z.B. eine Funktion schreiben will, die etwas mit so einer Person macht, wird’s schnell unübersichtlich — viele Variablen, viele Parameter, und man muss im Kopf behalten, was zusammengehört.

Syntax

Für solche Fälle, in denen mehrere Werte zusammengehören und eigentlich “eine Sache” sind, gibt es Objekte. Objekte erlauben es, beliebig viele Werte zu einem einzigen Wert zusammenzufassen.

Ein Objekt besteht aus beliebig vielen sogenannten Feldern (engl. Fields oder Properties). Ein Feld hat einen Namen und einen Wert, ein bisschen wie eine Variable. Man schreibt ein Objekt zwischen geschweifte Klammern {} mit den Feldern als <name>: <wert>-Paare, jeweils durch Kommas getrennt. Auf einzelne Felder greifst du mit der Punkt-Notation zu: objekt.feld.

📌 Geschwungene Klammern: Bisher haben {} immer Codeblöcke markiert, die ausgeführt werden und einen lokalen Scope haben. Die geschweiften Klammern um Objekte tun das nicht — sie beschreiben, ähnlich wie die eckigen Klammern [] um Arrays, nur einen Wert.

Mutation — Felder ändern und hinzufügen

Felder lassen sich mit = überschreiben oder neu hinzufügen — auch wenn das Object mit const deklariert wurde. (Das const schützt nur die Variable davor, ein anderes Object zu sein, nicht die Inhalte.)

Eckige-Klammern-Notation

Statt objekt.feld kannst du auch objekt["feld"] schreiben. Das ist hilfreich, wenn der Feldname dynamisch in einer Variable steckt.

Composition — Objects in Objects

Felder können alle Arten von Werten enthalten — auch andere Objects oder Arrays. Damit kannst du beliebig komplexe Datenstrukturen bauen.

Damit kannst du z.B. ganze Datenbanken im Speicher modellieren — ein Array aus Person-Objekten, jedes mit verschachtelten Adress- oder Bestellungs-Objekten.


Übung 🎯 — analyzeGrades

Schreib eine exportierte Funktion analyzeGrades(report), die einen Array aus Objekten entgegennimmt, die Schulfächer mit Noten auf einem Zeugnis repräsentieren, und ein Objekt mit einer Zusammenfassung des Zeugnisses zurückgibt.

Jedes Objekt im Eingabe-Array hat folgendes Format:

{
  // String, der das Fach angibt
  subject: "Deutsch",
  // Zahl, die die Note angibt (2.3 = 2-, 1.7 = 2+, 2.0 = 2)
  grade: 2.3,
}

Gib ein Objekt im folgenden Format zurück:

{
  // Durchschnittsnote aller Fächer
  averageGrade: 2.43,
  // Bestes Fach (das ganze Objekt — niedrigste Note ist die beste)
  bestSubject: {
    subject: "Deutsch",
    grade: 1.7,
  },
}
💡 Tipp anzeigen
  • Iteriere mit for of durch den Array.
  • Sammele die Summe der Noten und merk dir dabei das Objekt mit der bisher niedrigsten Note.
  • Am Ende summe / report.length für den Durchschnitt.
  • Gib ein neues Objekt zurück: return { averageGrade: ..., bestSubject: ... }.

Geschafft! 🚀🎉

Damit hast du alle drei Kapitel des Kurses durch! Du beherrschst:

  • Objects als zusammengesetzte Datenstruktur mit benannten Feldern
  • Mutation und dynamische Felder
  • Composition — verschachtelte Objects und Arrays

Und insgesamt aus dem Kurs:

  • Variablen, Datentypen, Operatoren
  • Kommentare, Conditionals, Loops, Scopes, Functions
  • Arrays, String-Builtins, Objects

Du bist bereit für die HSAKA! 🌞

Zurück zur Übersicht — vergiss nicht, dort deinen Fortschritt als Link zu teilen.