Map
Kolekcja par klucz i wartość, w której kluczem może być dowolna wartość, a kolejność dodawania jest zachowana.
- Zwraca
- Nowy obiekt
Map.
Przykład
#const scores = new Map()
scores.set('Ania', 120).set('Kuba', 95)
scores.set('Ania', 150)
console.log(scores.get('Ania'))
console.log(scores.has('Ola'))
console.log(scores.size)
console.log(scores)Definicja i zastosowanie
#Map przechowuje pary klucz i wartość, podobnie jak zwykły obiekt, ale ma kilka ważnych przewag. Kluczem może być wszystko: liczba, obiekt czy funkcja, a nie tylko napis. Liczbę par odczytasz od razu z właściwości size, a kolejność przechodzenia po mapie zawsze odpowiada kolejności dodawania.
Podstawowe metody to set(klucz, wartość) do zapisu, get(klucz) do odczytu, has(klucz) do sprawdzenia, delete(klucz) do usunięcia i clear() do wyczyszczenia całej mapy. Metoda set() zwraca mapę, więc wywołania można łączyć w łańcuch.
Po mapie przejdziesz pętlą for...of, która zwraca pary [klucz, wartość], albo metodą forEach(). Metody keys(), values() i entries() zwracają iteratory, które łatwo zamienić na tablicę: [...map.keys()].
Wybierz Map, gdy często dodajesz i usuwasz elementy albo klucze nie są napisami. Zwykły obiekt zostaw dla danych o stałym kształcie, takich jak { name, level }, i do zapisu w formacie JSON.
Składnia
#new Map()
new Map(iterable)
map.set(key, value)
map.get(key)
map.has(key)
map.delete(key)
map.clear()
map.sizeParametry
#iterable
opcjonalny
Tablica par[klucz, wartość]albo inny obiekt iterowalny z parami, np. wynikObject.entries().
Więcej przykładów
#const ania = { name: 'Ania' }
const kuba = { name: 'Kuba' }
const lastSeen = new Map([
[ania, 'wczoraj'],
[kuba, 'dziś']
])
console.log(lastSeen.get(ania))
console.log(lastSeen.get({ name: 'Ania' }))Klucze obiektowe są porównywane przez referencję. Nowy obiekt { name: "Ania" } wygląda tak samo, ale to inny obiekt niż ania.
const cart = new Map([
['Kurs HTML', 49],
['Kurs CSS', 59]
])
for (const [course, price] of cart) {
console.log(`${course}: ${price} zł`)
}
console.log([...cart.keys()])
console.log(Object.fromEntries(cart))const answers = ['B', 'A', 'B', 'C', 'B']
const counts = new Map()
for (const answer of answers) {
counts.set(answer, (counts.get(answer) ?? 0) + 1)
}
console.log(counts)Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#JSON.stringify()zamienia mapę na pusty obiekt{}. Przed zapisem przekształć ją przezObject.fromEntries(map)albo[...map].- Nie zapisuj danych przez
map[klucz] = wartość. Tworzy to zwykłą właściwość obiektu, którejget(),has()isizenie widzą. - Do liczenia wystąpień wzór
map.set(k, (map.get(k) ?? 0) + 1)jest krótki i czytelny.
Powiązane hasła
#- SetKolekcja unikalnych wartości: każda wartość może wystąpić w zbiorze tylko raz.
- WeakMapMapa z obiektami jako kluczami, która nie zatrzymuje ich w pamięci: wpis znika razem z nieużywanym obiektem.
- Object.entries()Zwraca tablicę par [klucz, wartość] obiektu.
- Object.fromEntries()Tworzy obiekt z listy par [klucz, wartość].
- for...ofPrzechodzi po kolejnych wartościach obiektu iterowalnego: tablicy, napisu, Map, Set i innych.
Widzisz błąd albo brakuje przykładu? Napisz do nas.