🗺️ Mapy (obiekty)
Mapy to kolekcje par klucz-wartość. Podobne do obiektów w JavaScript lub słowników w Pythonie.
Tworzenie map
let person = {
name: "Kitsune",
age: 25,
active: true
};
let empty = {};
let obj = {a: 1, b: 2,};
let key = "dynamicKey";
let computed = {
[key]: 42,
["prefix_" + key]: 100
};
print(computed["dynamicKey"]);
let x = 10, y = 20;
let point = {x, y};
Dostęp do właściwości
let obj = {name: "Kit", age: 25};
print(obj.name);
print(obj["age"]);
let key = "name";
print(obj[key]);
print(obj?.name);
print(obj?.missing);
Modyfikacja
let obj = {a: 1};
obj.b = 2;
obj["c"] = 3;
obj.remove("a");
print(obj);
Właściwości map (OOP)
let m = {a: 1, b: 2, c: 3};
m.size;
m.isEmpty;
{}.isEmpty;
Metody map
let m = {a: 1, b: 2, c: 3};
m.keys();
m.values();
m.entries();
m.toList();
m.has("a");
m.has("z");
m.get("a");
m.getOrDefault("z", 99);
m.set("d", 4);
m.remove("a");
m.clear();
Higher-order methods
let prices = {apple: 2, banana: 5, cherry: 3};
prices.filter((k, v) => v > 2);
prices.map((k, v) => v * 2);
prices.forEach((k, v) => print(k, v));
prices.reduce((acc, k, v) => acc + v, 0);
Łączenie map
let m1 = {a: 1, b: 2};
let m2 = {c: 3, d: 4};
m1.merge(m2);
let merged = {...m1, ...m2};
Dict Comprehension
let prices = {apple: 2, banana: 1, orange: 3};
let doubled = {k: v * 2 for k, v in prices};
let expensive = {k: v for k, v in prices if v > 1};
Mapy z metodami
let counter = {
value: 0,
increment: fn() {
this.value = this.value + 1;
return this.value;
},
reset: fn() {
this.value = 0;
}
};
print(counter.increment());
print(counter.increment());
counter.reset();
print(counter.value);
Chainowanie
let result = {a: 1, b: 2, c: 3, d: 4}
.filter((k, v) => v > 1)
.map((k, v) => v * 10)
.values()
.sum();
print(result);
Destructuring
let config = {
host: "localhost",
port: 8080,
debug: true
};
let {host, port, timeout = 5000} = config;
print(host);
print(port);
print(timeout);
Iteracja
let obj = {x: 1, y: 2, z: 3};
for (entry in obj) {
print(entry[0] + " = " + entry[1]);
}
for (key in obj.keys()) {
print(key, obj[key]);
}
📝 Uwaga o metodach vs właściwościach
Gdy mapa ma metodę o tej samej nazwie co wbudowana (np. .has()), wywołanie z nawiasami obj.has("x") woła metodę, a bez nawiasów obj.has pobiera właściwość.