| Autor | Zpráva | ||
|---|---|---|---|
| xjjb Profil * |
#1 · Zasláno: 15. 12. 2014, 11:04:51
Dobrý den, potřeboval bych poradit. mám pole souřadnic a potřebuju ověřit jestli tam nějaká položka je. mám následující kód ale to nefunguje. jak se to dá udělat? Děkuji
var positions = [];
positions.push({x: 10, y: 10});
positions.push({x: 10, y: 11});
positions.push({x: 10, y: 12});
positions.push({x: 10, y: 13});
console.log(positions.indexOf({x: 10, y: 10}) >= 0); //vrací false
|
||
| juriad Profil |
No, jenže indexOf porovnává na shodnost:
indexOf compares searchElement to elements of the Array using strict equality (the same method used by the ===, or triple-equals, operator). Musíš si naprogramovat vlastní funkci, například: http://kod.djpw.cz/trib Implementace závisí na tom, k čemu daný kód slouží. Pokud budeš provádět hodně testů (tisíce) nebo pokud bude seznam souřadnic velký (opět stovky - tisíce), mohl bys implementovat něco chytřejšiho, třeba nějakou množinovou datovou strukturu v podobě hashovací tabulky či stromu. Pozor na to, že indexOf na poli funguje až od IE 9. |
||
| _es Profil |
xjjb:
Objekty sú porovnávané odkazom a ty porovnávaš dva odlišné objekty, aj keď s rovnakými vlastnosťami. Musel by si si priradený objekt uložiť, aby si to mohol porovnať: var positions = [], o;
positions.push(o = {x: 10, y: 10});
positions.push({x: 10, y: 11});
positions.push({x: 10, y: 12});
positions.push({x: 10, y: 13});
alert(positions.indexOf(o) >= 0);positions[0] a o budú ukazovať na ten istý objekt, teda sa nebudú porovnávať hodnoty v nich. Ak chceš porovnávať podľa hodnôt, treba to spraviť cez vlastný cyklus na celé pole.
juriad: > No, jenže indexOf porovnává na shodnost: > indexOf compares searchElement to elements of the Array using strict equality (the same method used by the ===, or triple-equals, operator). To je v tomto prípade jedno, oba operátory dajú pri porovnaní dvoch objektov rovnaký výsledok. |
||
|
Časová prodleva: 12 let
|
|||
0