Na tym forum piszemy po polsku (używamy polskich “ogonków”) - Ciebie też to dotyczy.
Nie wiem po co masz zdublowany kod (obj to to samo co imgcur, analogicznie obji i imgcuri).
Nie znamy dokładnej zawartości funkcji findleft() i findtop() - możemy się tylko domyślać, co one robią - ale jeśli tam jest jakiś błąd?
Ponieważ używasz zwykłej równości, to musisz pamiętać, żeby dopasować położenie obu elementów/obrazków co do piksela - różnica 1px może być często niezauważalna, a kod się nie wykona, bo równość nie będzie spełniona.
Konstrukcja [x] to tablica zawierająca element x - konstrukcja np. przydatna jak się chce zwrócić w funkcji więcej niż jeden element - return [x,y,z]; zwróci tablicę 3-elementową.
U Ciebie nie ma takiej potrzeby, stąd nawiasy [] są zbędne. Ale nie tylko są zbędne - powodowały błędne działanie porównania. Otóż porównywać na “==” można m.in. liczby lub napisy - i to ma sens. Ale nie można w JS tym operatorem (sensownie) porównywać innych elementów, np. tablic czy obiektów, bo dwie tablice muszą być tym samym elementem (zmienną), by były równe. Sprawdź sobie taką konstrukcję:
alert([1] == [1]);
Wiesz co będzie wynikiem? FALSE!. Bo obie tablice, mimo iż zawierają tą samą wartość, są dwiema osobnymi elementmi (bytami), więc nie są sobie równe. Za to taki kod
W JavaScript tablica jest obiektem porównując dwa obiekty porównujesz ich referencje. Twój zapis oznaczał porównanie dwóch róznych referencji, natomiast gdy porównujesz wartości wszystko jest ok.
Ponadto gdy przypisujesz coś do obiektu to przypsujesz referencje czyli np zapis:
a = [1];
b = a; // zarówno a[0] i b[0] są równe 1
b[0] = 2 // zarowno a[0] jak i b[0] są równe 2
W Strefie Kursów jest dobry kurs video z programowania w JS. Z jego pomocą można spokojnie przejść z podstaw do poziomu. Piszę o tym bo sam się z tego uczyłem:)