Autor Zpráva
quatzael
Profil
V JS funkce array_diff, která je v PHP bohužel chybí (a nejen ona).
Hledal jsem řešení jak to udělat v JS a našel jsem tohle vlákno. Ale nezdá se mi, že by to tam bylo správně a navíc je to moc dlouhý..
Napadlo mě tohle jednoduchý řešení:
for(i=0;i<arrayA.length;i++)
{var a = ArrayB.indexOf(arrayA[i]); if (a >= 0) ArrayB.splice(a,1);}

Ale zdá se mi to až moc jednoduchý na to, jak to tam složitě řešili. Je to tedy takhle prosím správně? Bude to fungovat za všech okolností?
juriad
Profil
1. Proměnná i je použita bez var.
2. Pole ArrayB může obsahovat těch prvků více.
3. indexOf na poli funguje až od IE9.
4. Pokud je pole arrayA dlouhé a ArrayB krátké, je lepší přepnout na opačný způsob -> iteraci přes ArrayB a kontrolovat, zda prvek není i v arrayA.
5. splice je možné nahradit přesunem prvku o jednu pozici doleva, naakumulovat tyto posuny a provést jeden splice až nakonec.
6. Ty nepočítáš arrayA - ArrayB, ale naopak ArrayB - arrayA. Liší se ti sémantika.
7. Pole ArrayB je v průběhu výpočtu modifikované, array_diff pole nemění, vrací nové.
quatzael
Profil
1. Tohle je jen ukázka..
3. To jsem nevěděl, ale indexOf jste mě tady na fóru naučili používat vy.
6. Máš pravdu, omylem jsem to prohodil, když jsem to přepisoval z reálnýho příkladu.
7. Jde jen o ukázku, stačí před to dát proměnnou a pole do ní zkopírovat.
juriad
Profil
Můžeš použít už existující funkce, ktere se snaží přesně zachovat API PHP funkcí.
phpjs.org/functions/array_diff
Nezapomínej však na to, že pole v PHP není obyčejné pole, ale je to asociativní, čemuž odpovídá objekt v JS.
quatzael
Profil
juriad:
Díky za odkaz, to vypadá užitečně.

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: