Dlaczego to dziala?

Odpowiedz Nowy wątek
2015-02-02 12:34
0

Witam
Mam nastepujacy problem... chociaz w zasadzie moznaby sie klocic nad nazwaniem tego problemem.
Otoz mam tablice z lista uzytkownikow (czyli obiekty) i kazdy ma swoj nick, id itd. i potrzebuje ich losowo pokolejkowac.
A wiec zbieram sobie ich id, do tymczasowej tablicy po kolei wpisuje te id w losowej kolejnosci a pozniej w oparciu o taka losowo kolejke z tymi id kazdemu uzytkownikowi w oryginalnej tablicy nadaje odpowiedni numer w kolejce. Tu raczej problemow nie - wszytsko dziala.
Ale teraz kiedy w oryginalnej tablicy mam do kazdego uzytkownika dopisany jego numer w kolejce to fajnie byloby ich w tej tablicy posortowac wedlug ich kolejnosc w kolejce. Do tego problemu nie do konca wiedzialem jak sie zabrac ale napisalem kawalek kodu, w zasadzie bez wiary, ze zadziala, wyglada on nastepujaco:

var sa = new Array({id: 1, queue: 2, nick: 'Tester'}, {id: 2, queue: 1, nick: 'Tester2'});
console.log('Przed sortowaniem');
console.log(sa);

sa.sort(function(a, b){return a-b;});

console.log('Po sortowaniu');
console.log(sa);

Tutaj oczywiscie dla przykladu stworzylem nowa tablice i na sztywno dodalem kolejek i inne wartosci ale nie w tym rzecz. Dlaczego ten kod dziala? Przeciez mamy kilka wartosci, queue nie jest ani pierwsza ani ostatnia a sortuje ich wlasnie wedlug niej.
Zmienilem sobie troche kolejnosc i wartosci:

var sa = new Array({queue: 2, id: 1, nick: 'Tester2'}, {queue: 1, id: 2, nick: 'Tester3'});

O dziwo nadal dziala. Dlaczego ten skrypt bierze pod uwage wlasnie wartosc queue? Chyba, ze jest to tylko zludzenie.
Moglby mi ktos to wyjasnic?

Z gory dziekuje
Pozdrawiam

Pozostało 580 znaków

2015-02-02 13:08
0

ale to nie dziala :P:P => http://jsbin.com/vutozeyaxo/1/edit?html,js,console,output bo nie sortuje, bo nie ebdzie sortowac dopoki w function nie pdoasz a.queue i b.queue

Pozostało 580 znaków

2015-02-02 13:43
0

Jak dla mnie dziala - uklada obiekty w tablicy wedlug wartosci queue, przynajmniej w kazdym wyprobowanym przeze mnie wariancie, ale dla spokoju ducha dodalem, tylko nie w function w sensie w parametrach zeby ktos zle nie zrozumial tylko w return :)

function(a, b) {return a.queue-b.queue;}
no jak dziala jak w przykladzie powyzej przed sortowaniem jest w pierwszym elemencie queue rowne 2 a w drugim 1 i po sortowaniu zostaje bez zmian. hehe i pamietaj nawet zepsuty zegarek dwa razy dziennie pokazuje dobra godzine;) - szalonyfacet 2015-02-02 14:08
Az zrobilem screena bo zwatpilem czy mowimy o tym samym kawalku kodu :) : http://www.eluzive.pl/tmpScreen.png ... Ohh... wlasnie sprawdzilem na Chromie (na Firekosie dzialalem do tej pory) i tam rzeczyiwiscie daje takie efekty o jakich wspominasz. Ciekawe :) - Eluzive 2015-02-02 21:50

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0