Autor Zpráva
Witiko
Profil *
Mám menší otázku, občas se mi ve scriptech stává, že potřebuju zkopírovat obsah jednoho pole do druhého, nicméně zkopíruji pouze odkaz na druhé pole.

var pole_jedna = new Array();
var pole_dva=new Array();
pole_jedna[0] = "text v poli 1";
pole_dva = pole_jedna;
pole_jedna[0] = "text v poli 1 jiný";
alert(pole_dva[0]);


// Alert vyhodí "text v poli 1 jiný"

var pole_jedna = new Array();
var pole_dva=new Array();
pole_jedna[0] = "text v poli 1";
pole_dva = pole_jedna.join(",").split(",");
pole_jedna[0] = "text v poli 1 jiný";
alert(pole_dva[0]);


// Alert vyhodí "text v poli 1", správně tedy dojde k uložení obsahu Array a ne jen odkazu na něj, dříve jsem řešil for cyklem, který veškerý obsah Array zapsal do nového Array. Zajímalo by mě, jestli je zde nějaký elegantnější způsob, přijde mi to jako obcházení.

Nejspíš chápu, proč k problému dochází. Důvod bude pravděpodobně stejný, jako proč na [] == [] vyhazuje javascript false, Array je braný jako objekt, každé pole je instancí objektu, místo obsahu tedy kopíruji pouze odkaz na daný objekt, stejně mě ale zajímá, jestli není nějaké lepší řešení.

Moderátor Chamurappi: Titulek „2 Arrays one value“ jednak nebyl česky, jednak ani nedával smysl.
fajzen
Profil
Witiko:
var pole_jedna = new Array('a', 'b', 'c');
var pole_dva = pole_jedna.slice(0);
Witiko
Profil *
To je pořád přepis, ačkoliv uznávám, že lepší. Žádný elegantnější způsob neexistuje?
fajzen
Profil
Witiko:
aký prepis? Metóda slice(index) vráti pole prvkov od indexu index, nie len ten daný prvok...
Witiko
Profil *
Já vím, co to dělá. Jen jsem myslel, že je tu nějaký speciální způsob zápisu, který ještě neznám, protože tenhle způsob kopírování polí mi přijde jako opis.
Witiko
Profil *
Navíc pokud mám vícerozměrné pole, tak se stejně bez řešení cyklem neobejdu. Skutečně neexistuje jiný způsob jak v javascriptu zkopírovat obsah pole?
fajzen
Profil
Witiko:
pokiaľ viem, nič také v JS neexistuje
Witiko
Profil *
Tak to je ale potom celkem nedomyšlený koncept, pokud to porovnáme s jinýmy jazyky.
_es
Profil
Witiko:
Skutečně neexistuje jiný způsob jak v javascriptu zkopírovat obsah pole?

Môžeš si ten spôsob dorobiť:
Array.prototype.copy = function(){/*kód kopírujúci obsah poľa (cez this)*/};

Použitie pre pole p:
var p2 = p.copy();
Witiko
Profil *
Tak jsem to taky udělal. :)

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:

0