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: 9 let
|
0