Autor Zpráva
Paja
Profil *
Pouzivam pole vytvorene takto:
settings=[];
settings['nejaky string'] = hodnota;

a takovych vyrazu je tam vic. Potrebuju zjistit, jak se jmenuji ty indexy pole, ktere nejsou cisla - tedy ziskat seznam vsech indexu pole. Jak by se to dalo udelat?
Pokud by to neslo, tak bych aspon potrebpoval udelat kopii pole, ale tak, aby se mi okopirovaly i ty indexy, ktere nejsou cisla. (Tedy nestaci proste okopirovat prvek po prvku...) prirazeni nove = stare mi taky neni k nicemu, protoze se vytvori sdilena kopie, ale ja potrebuju vytvorit 2 nezavisle objekty.
Diky za rady,
Paja
DoubleThink
Profil *
Ve Flashi na tohle není žádná funkce.
Asi nebude zbytí, než projít pole a zapsat si klíče:

for (var item in myArray) {

trace("index: "+item+" = "+myArray[item]);
}
Paja
Profil *
jo, diky
uz jsem to udelal jako novou metodu pro Array :-)
presne to jsem potreboval
Paja
Profil *
Podle navodu vyse uvedeneho jsem napsal tuto funkci:

Array.prototype.copy = function()
{ newArray = [];
for(_index in this)
{ if(typeof this[_index]=='object') newArray[_index] = this[_index].copy();//tohle by melo zajistit nezavislou kopii
else newArray[_index] = this[_index];}
return newArray;
}

Puvodne tam zadna podminka nebyla, ale to zpusobilo, ze kdyz uvnitr pole bylo dalsi pole, tak se vytvorila zase jenom sdilena kopie.
Abych vytvoril nezavislou, tak jsem myslel, ze to zavolam rekurzi, ale nejak to nefunguje. Cim to je? Flash to podle napovedy podporuje, tak nevim, kde je chyba...
Pokud ji vidite a vite, jak ji odstranit, tak se podelte o informaci.
Diky za radu
Paja
XXX
Profil
Nevim, jestli jsem spravne pochopil tvuj problem, ale chapu to asi tahle: Pravda je, ze pokud pracujes s nejakym polem a chces vytvorit nove, nemuzes ho vytvorit jen tak, ze das: puvodniPole = novePole; Takhle sice vytvoris nove pole, ktere se rovna tomu puvodnimu,ale zaroven novePole bude kopii toho puvodniho, takze kdyz zmenis neco v puvodnim, zmeni se i v novem. Pokud chces vytvorit nezavisou kopii pole, staci pouzit skript:

for(var i:Number = 1; i<= puvodniPole.length; i++){
novePole.push(puvodniPole[i]);
}


timto skriptem vytvoris kopii pole, ktera bude dale nazavisla na puvodnim poli ;)
Paja
Profil *
Nepochopil jsi spravne.
Totez, co popisujes, se da udelat i moji verzi, teda tou, co je uplne na zacatku.
Pro me bylo dulezite, aby se mi okopirovaly i neciselne indexy... treba pole["neciselne"] = nejakahodnota

To taky funguje bez problemu. Problem nastane tehdy, kdyz je tou nejakou hodnotou dalsi vnorene pole.
Pak se vytvori pouze sdilena kopie. Abych tomu predesel, tak sem to chtel zavolat rekurzi v takovem pripade. Ale to nefunguje. Jak by se to dalo vyresit alternativne je mi jasne... mohl bych udelat funkci, ktera si bude hlidat pocet vnoreni, ale to jsem nechtel.
Paja
Profil *
Pokud by to jeste nekoho zajimalo, tak tady je kod funkce, ktera uz funguje. Musel jsem to udelat presne tak, jak jsem popsal v predchozim prispevku.

Array.prototype.copy = function(icall)
{ if(icall==null) icall=0;
set('newArray'+icall, []);
for(_index in this)
{ if(typeof this[_index]=='object') set('newArray'+icall+'.'+_index, this[_index].copy(icall+1));
else set('newArray'+icall+'.'+_index, this[_index]);}
return eval('newArray'+icall);
}
Toto téma je uzamčeno. Odpověď nelze zaslat.

0