Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaScript: Banální porovnání prvků v poli

Mám pole hodnot:
var hodnoty = [[7, 9], [12, 11],[3,12],[33,10],[55,13],[14,2]];

A potrebuji zjistit kdy se nachazim v poli o určitých hodnotách.
Například jak uvést pravou stranu podmínky if, aby když zálohuju pole původní prvek třeba [55, 13]
aby byl zavolan ten alert
Takhle:
[js]var hodnoty = [[7, 9], [12, 11],[3,12],[33,10],[55,13],[14,2]];
var ZalohujHodnoty = [[0,0]];
function ZalohujFunkce()
{
for (var i = 0; i < hodnoty.length; ++i)
{
ZalohujHodnoty[i] = hodnoty[i];
if (ZalohujHodnoty[i] == ([55, 13] ) // Tohle porovnani to nikdy nevezme jako true !
{
alert("Shoda !!!");
}

}

}

[/js]
Chybu mam asi v syntaxi na pravé straně podmínky if, protože alert("Shoda !!!"); se neprovede nikdy.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Zhoda nenastane nikdy, pretože polia sa neporovnávajú hodnotou, ale referenciou (tie polia sú dva rô…
los 14.03.2006 14:17
los
OK. V tom případě to udělám raději celé jinak :-( . poslední
Flash_Gordon 14.03.2006 14:22
Flash_Gordon

Zhoda nenastane nikdy, pretože polia sa neporovnávajú hodnotou, ale referenciou (tie polia sú dva rôzne objekty, hoci obsahujú rovnaké hodnoty).

Čiže si musíš spraviť vlastnú funkciu, ktorá vzájomne porovná všetky prvky poľa:
[js]function compare (a, b)
{
if (a.length != b.length)
return false;

for (var i = 0; i < a.length; ++i)
if (a [i] != b [i])
return false;

return true;
}

if (compare (ZalohujHodnoty [i], [55, 13]))
alert ("Shoda !!!");
[/js]

Hoci v tomto konkrétnom prípade by som asi použil jednoduchšie:
[js]if (ZalohujHodnoty [i].join () == "55,13")
alert ("Shoda !!!");
[/js]

// edit
[js]ZalohujHodnoty [i] = hodnoty [i];[/js]
Tento riadok nezálohuje hodnoty (nevytvorí kópiu hodnôt), iba si zapamätáš referenciu na prvok poľa (dvojicu [a, b]).

(netestované)

Zpět do poradny Odpovědět na původní otázku Nahoru