Autor Zpráva
Petr Bartošek
Profil *
Dobrý den,
pokud mám pole:

var zelenina = ['mrkev','zelí','cibule'];

lze nějakým způsobem vytvořit dodatečné pole v např. poli mrkev, do kterého bych vložil jeho barvu?
Takto se mi to nepodařilo, kde je chyba?

zelenina[0][0] = 'oranžová';

Děkuji. Zdraví.
Petr Bartošek
Radek9
Profil
Petr Bartošek:
To je logické. Snažíš se totiž upravovat ten string, žádné pole tam není. Buď ten prvek (string) zabalíš do dalšího pole, nebo spíše použij nějaký specifický objekt, ke kterému už jednoduše přiřadíš barvu.
Joker
Profil
Jedna poznámka, možná trochu na okraj:
JS umožňuje (v moderních prohlížečích) brát řetězec i jako pole, takže když zelenina[0] = "mrkev", tak zelenina[0][0] bude "m" (první písmeno řetězce "mrkev"). Ale není možné tím způsobem řetězce měnit, proto to zelenina[0][0] = 'oranžová'; nic neudělá.

Petr Bartošek:
S takovou datovou strukturou by se ale dost těžko pracovalo, ne?
Jakékoliv čtení prvku by muselo začínat „Pokud prvek je pole…“ (Například: Jaký druh zeleniny je na dané pozici? Pokud ten prvek je pole, je název druhu nějaká jeho položka, jinak to je sám prvek).

Možná by bylo lepší to rovnou dát do nějaké struktury?
var zelenina = [{'druh' : 'mrkev'},{'druh' : 'zelí'},{'druh' : 'cibule'}];
zelenina[0].barva = "oranžová";
alert(zelenina[0].barva + " " + zelenina[0].druh); // oranžová mrkev
Petr Bartošek
Profil *
Radek9:
Děkuji za odpověď, jak přesně mohu zabalit string do dalšího pole?
Radek9
Profil
Petr Bartošek:
jak přesně mohu zabalit string do dalšího pole?
Prostě takhle:
var zelenina = [["mrkev"], ["zelí"], ["cibule"]];
Ale bude asi lepší použít řešení přes objekt, které ukázal Joker. Dalo by se ještě zjednodušit pomocí konstruktoru:
function Zelenina(druh, barva) {
  this.druh = druh;
  this.barva = barva || "černá";
}

var zelenina = [new Zelenina("mrkev"), new Zelenina("zelí"), new Zelenina("ciblue")];

zelenina[0].barva = "bílá";
Petr Bartošek
Profil *
Radek9:
Děkuji za info. Hezký večer.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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