Autor Zpráva
marian80
Profil
Zdravím,
potreboval by som dynamicky, teda programovo, vytvoriť takéto pole:

                var markersOnMap = [{
                        placeName: "Australia (Uluru)",
                        placeDesc: "Popis pre Uluru",
                        placeImg:  "https://www.dw.com/image/41191418_303.jpg",
                        LatLng:    [{
                            lat: -25.344,
                            lng: 131.036
                        }
                       ]
                    },
                    {
                    ... dalšie mesto, popis, img,súradnice
                    }
                ];

Viete mi s tým pomôcť? Dáta budú v premenných, napr. var nazovMesta = "Australia (Uluru)";

Ďakujem.
lionel messi
Profil
marian80:

Ak som to pochopil správne, hľadáš formát JSON. Má naozaj široké využitie v JavaScripte aj PHP.

JSON a Javascript
Funkcie pre prácu s JSON v PHP
marian80
Profil
lionel messi:
tak asi toto :-) ale s tým nemám absolútne žiadne skúsenosti. Vedel by si mi pomôcť?
RastyAmateur
Profil
marian80:
Není jasné, co tedy máš a co budeš potřebovat. V ukázce máš pole měst, ale jen jednu proměnnou var nazovMesta? Nebo to ta proměnná var nazovMesta bude v nějakém cyklu a její obsah bude jiný v každém průchodu?

Když máš výše uvedený objekt, k proměnným přistupuješ pomocí tečkové notace, v případě pole normálně přes index. Případně lze použít "index syntax" i pro klíče prvků objektu. Můžeš tak k hodnotám jak přistupovat, tak je nastavovat. Ukázka:
var markersOnMap = [ ... ];  // Viz tvá ukázka

// Vypiš placeName
markersOnMap[0].placeName;
markersOnMap[0]["placeName"];

// Uprav placeName
markersOnMap[0].placeName = "Australia (Uluru) [edited]";
markersOnMap[0]["placeName"] = "Australia (Uluru) [edited]";

To markersOnMap je prosté pole objektů, tak se k tomu tak i chováš. Pro přidání nového města napíšeš jednoduše:
markersOnMap[] = {
  placeName: "Bar (Foo)",
  placeDesc: "Popis pre Bar Foo",
  placeImg:  "...",
  ...
}



Zmiňovaný JSON znamená JavaScript Object Notation a víceméně je to prostě jen řetězec znaků, který se pak dá nějak překonvertovat právě do objektu. Používá se to v případě, kdy si ta data taháš dynamicky ze serveru pomocí nějakých dotazů. Ovšem když píšeš, že: „Dáta budú v premenných, napr. var nazovMesta = "Australia (Uluru)";“, tak si nejsem úplně jistý, jestli to potřebuješ...
marian80
Profil
RastyAmateur:
Ako píšeš, tie premenné var nazovmesta, var popismesta, var obrazok, var suradnice budú v cykle a obsah bude vždy iný.
Polia viacmenej chápem, idem to skúsiť nejako vytvoriť ten skript, len stále neviem ako tam mám priradiť tie súradnice, je to niečo ako dvojrozmerné pole?


RastyAmateur:
Skúsil som toto:

                var markersOnMap = [{
                        placeName: "Australia (Uluru)",
                        placeDesc: "Popis pre Uluru",
                        placeImg:  "https://www.dw.com/image/41191418_303.jpg",
                        LatLng:    [{
                            lat: 1,
                            lng: 1
                        }]
                    }
                ];

markersOnMap[] = {
  placeName: "Bar (Foo)",
  placeDesc: "Popis pre Bar Foo",
  placeImg:  "...",
  LatLng:   [{
              lat: 2,
              lng: 2
            }]
}
alert (markersOnMap[1].placeName); 

ale vyhadzuje chybu Unexpected token ']' na riadku: markersOnMap[] = {
lionel messi
Profil
marian80:

Pokiaľ viem, v JS sa nedá pridať prvok do poľa pomocou nazovpola[] ako v PHP, ale pre pridanie na koniec poľa treba použiť metódu https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/push (ak chceme pridať na začiatok poľa, použijeme metódu unshift):

markersOnMap.push = {
  placeName: "Bar (Foo)",
  placeDesc: "Popis pre Bar Foo",
  placeImg:  "...",
  LatLng:   [{
              lat: 2,
              lng: 2
            }]
}
marian80
Profil
lionel messi:
ďakujem, práve som na to prišiel. Už mi to funguje tak ako som chcel.
lionel messi
Profil
lionel messi:
Pokiaľ viem, v JS sa nedá pridať prvok do poľa pomocou nazovpola[] ako v PHP

Opravujem svoju odpoveď neúplnú a zavádzajúcu odpoveď, pretože pridanie nového prvku do poľa pomocou hranatých zátvoriek v JS možné je. Na rozdiel od PHP však v nich treba priamo uviesť aj konkrétny index. Keďže všetky polia v JS sú číslované od nuly vzostupne, nový prvok sa v tomto prípade pridá do poľa pole pod indexom pole.length (metóda length vracia počet prvkov poľa).

Čiže ekvivalentná možnosť ku kódu v [6] je:

markersOnMap[markersOnMap.length] = {
  placeName: "Bar (Foo)",
  placeDesc: "Popis pre Bar Foo",
  placeImg:  "...",
  LatLng:   [{
              lat: 2,
              lng: 2
            }]
}

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0