Autor Zpráva
xjjb
Profil *
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);
No 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.

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: