Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 13. 8. 2015, 08:03:57
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 |
#4 · Zasláno: 13. 8. 2015, 11:27:01
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 |
#5 · Zasláno: 13. 8. 2015, 12:15:46
juriad:
Díky za odkaz, to vypadá užitečně. |
||
Časová prodleva: 9 let
|
0