Wpis z mikrobloga

Czy poprawnym jest trzymanie wartości w obiektach w ten sposób:
obj = {
"1":"/programfiles/zdjecie1.jpg",
"2":"/program
files/zdjecie2.jpg",
"55":"/programfiles/kot.jpg",
"32":"/program
files/dupa.jpg"
}

I odnoszenie sie do nich w ten sposób: obj.1? Sposób działa tylko zastanawiam się na ile jest poprawny i czy można tak robić? Chodzi o to że mam tablicę elementów z ID zdjęcia i chciałem przeiterować sobie po kolei i z każdym ID otworzyć przypisane do niego zdjęcie z obiektu?

#webdev #javascript
  • 7
  • Odpowiedz
@michael94: Ja bym powiedział, że poprawne, ale wg mnie to kiepski standard. Może lepiej wykorzystać klasę przeznaczoną do tego typu kolekcji (kolekcja klucz:wartość), tzn. Map?

obj = new Map();
obj.set( 1 , 'zdjecie1.jpg' );
obj.set( 2 , 'zdjecie2.jpg' );
obj.set( 55 ,
  • Odpowiedz
@larvaexotech: Map weszło dopiero w ES6, więc trzeba na to wziąć poprawkę. A w czasach wcześniejszych pseudo mapy robiło się dokładnie w taki sposób jak zaproponował OP, czyli używając obiektu. Wszakże obiekt to w przybliżeniu to samo co Map
  • Odpowiedz
@larvaexotech: @Marmite:
W sumie i tak zwykłe object literale są prawie zawsze stosowane w takich przypadkach jak u OPa.
Plusem map jest to, że klucz nie musi być stringiem jak w przypadku object literala.
  • Odpowiedz
@P0lip: Wydaje mi się też że Map jest wydajniejszy niż standardowy obiekt, aczkolwiek mogę się mylić. Uważam tak z tego względu że po pierwsze Map jest kontenerem przeznaczonym do trzymania tego typu kolekcji, jeśli miałby być równoważny z obiektem to po co wogóle powstał? Po drugie, w większości silników JS modyfikowanie obiektu w locie bardzo dezorientuje mechanizmy optymalizacji - bo każde dodanie wpisu do kolekcji zmienia jego "hidden class" przynajmniej
  • Odpowiedz