2015-09-01 13 views
5

Aby "zmapować" obiekt mapy, należy najpierw go zniszczyć do tablicy tablic. Wydaje mi się, że jest to powrót do tyłu.Dlaczego mapa nie ma metody mapy?

Czy ktoś może mi wyjaśnić, co kryje się pod tym uzasadnieniem projektu? Rozumiem, że inne języki, takie jak Scala, mają metody mapowania w Mapach, więc staram się zrozumieć, dlaczego nie są one dostępne w JavaScript.

składnia Wydaje się więc niepotrzebnie skomplikowane i gadatliwy:

let mappedMap = new Map( 
    [...originalMap] 
    .map(([k, v]) => [k * 2, '_' + v]) 
); 

nie to może być coś takiego?

let mappedMap = originalMap.map((k, v) => [k * 2, '_' + v]); 
+4

Powinieneś zadać to pytanie w miejscu uczęszczanym przez komisję. Większość osób z zewnątrz nie ma wglądu w swoje decyzje. –

+0

Powinno to być co najmniej 'let mappedMap = new Map (Array.from (originalMap, ([k, v]) => [k * 2, '_' + v]))), aby uniknąć dodatkowej kopii szyk. Jest również trywialne, aby zrobić wersję iterowalną. Zakładam, że odpowiedź brzmi "ponieważ zawsze można ją dodać później i jest trywialna do wdrożenia w oddzielnym module". Plus ogólny "Iterable.map" byłby bardziej użyteczny i również go brakuje. – loganfsmyth

+3

Afaik problem został rozwiązany za pomocą ogólnych metod na iteratorach, a nie na samych Mapach. Iirc, nie było zbyt wiele czasu ani konsensusu, ani żadnej propozycji, jak dokładnie to zrobić w momencie, gdy specyfikacja ES6 została zakończona, więc została pominięta. Łatwo je polyfilować, oczekujemy, że pliki z biblioteki użytkownika będą dostępne. Gdy tylko pojawią się wzorce użycia, zostanie rozważona standaryzacja. Taki sam proces, jak w przypadku metod iteracji 'Array'. – Bergi

Odpowiedz

0

Mapa na ES6 jest obecnie reprezentowana jako możliwa do sprawdzenia za pomocą systemu klucza/wartości. A funkcja mapowania tablic zwraca nową tablicę. Nie jestem pewien, czy byłoby możliwe zwrócenie nowej wersji w ten sposób. Używałbym opcji OEach dla Maps i budowania nowych. Jeśli cokolwiek, jeśli możesz zbudować funkcję z tą samą funkcjonalnością i zdecydowanie polecam zajrzeć do immutable.js

Powiązane problemy