Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Sortowanie w/g indeksu podtablicy
Forum PHP.pl > Forum > Przedszkole
HellRider
Z racji pierwszego postu witam forumowiczów smile.gif

Problem mam dość nietypowy, tak uważam po przeczytaniu kilkunastu zbiorów informacji, które mogły dać mi solucję, a nie dały.
Dopiero po tym piszę tutaj. Potrzebuję pomocy przy napisaniu funkcji sortującej tablicę wielowymiarową według wartości "x" w "tablica[n][x]".
Tablica jest generowana następująco:

  1. <?php
  2. PRZYPOMINAM, JAVASCRIPT, NIE PHP
  3. ________________________________
  4.  
  5. for (n=0; n<max; n++){
  6.  Tablica[n] = new Array();
  7.  Tablica[n]['imie'] = ...
  8.  Tablica[n]['nazwisko'] = ...
  9.  Tablica[n]['wiek'] = ...
  10.  Tablica[n]['wzrost'] = ...
  11.  Tablica[n]['waga'] = ...
  12.  Tablica[n]['mail'] = ...
  13. }
  14. ?>


Wykropkowałem wartości, ponieważ nie są istotne.
Muszę mieć możliwość sortowania pierwszego wymiaru według np.: [n]['imie'] lub [n]['wzrost'].
Brak pomysłów, proszę o sugestie smile.gif

Pozdrawiam.
lord_t
Wykorzystaj funkcję podawaną do sort: w niej porównaj wartości które chcesz. Obczaj:

http://republika.onet.pl/13965,16016,13,04...ursy.html#16016
HellRider
Dzięki za odpowiedź, jednak po drodze przez gąszcze opisów i przykładów, tudzież JS reference,
spotkałem metodę .sort i stosowanie z nią funkcji, jednak JS to moja słaba strona, szczerze słabizna,
nie mam pojęcia jak napisać funkcję dla metody .sort, by ta dla każdego N pobrała dane
z pola X w tablica[N][X].
Z tym teraz muszę poprosić o pomoc. Napisałem już dla tego skryptu większość kodu, tworzenie
tablicy z pobranymi danymi, generowanie nowych danych w elemencie, zdarzenia, podmianę
elementów HTML, tylko to sortowanie blokuje mi release skryptu sad.gif
lord_t
Kod
max1=5;
litery=['a','b','c','f','g'];
tab = new Array();

for (n=0; n<max1; n++){
tab[n] = new Array();
tab[n]['imie'] = ""+litery[Math.round(Math.random()*4)]+litery[Math.round(Math.random()*4)];
tab[n]['nazwisko'] = "bbb";
tab[n]['wiek'] = 10-n+Math.round(Math.random()*1000);
}

tab.sort(function(el1,el2){
    if(el1['imie']<el2['imie']) return -1;
    else if(el1['imie']>el2['imie']) return 1;
    else return 0;

/*
Jej zadaniem jest zwrócenie wartości ujemnej, jeśli element1 jest mniejszy od element2, wartości dodatniej,
jeśli element1 jest większy od element2 lub też wartości 0, jeśli element1 i element2 są sobie równe.
Gdyby zatem istniała konieczność posortowania tablicy liczb w porządku malejącym, można by zastosować kod:
*/
});
s='';
for (n=0; n<max1; n++){
    s+="\n"+tab[n]['imie'] +" "+tab[n]['nazwisko']+" "+tab[n]['wiek'];
}
alert(s);


Tym testowałem, ale w sumie to masz już rozwiązanie na dłoni. Należy się 10 zeta;p

Uwagi:
-testowane na FF3
-dla polskich znaków trzeba by napisać własną funkcję porównującą
HellRider
Chodziło o to:
Kod
tab.sort(function(el1,el2){
    if(el1['imie']<el2['imie']) return -1;
    else if(el1['imie']>el2['imie']) return 1;
    else return 0;
});


Rety, takie banalne, że aż przeszło pod nosem, wielkie dzięki, klikam "Pomógł",
do tego mały kredyt dla lord_t|php.pl w skrypcie (Dodatek do gry Ikariam
rozszerzający możliwości w pewnych widokach, spaprane w v.0.2.8.) smile.gif

Nie wiedziałem jak dokładnie działa metoda .sort, ani że parametry jej funkcji
są elementami pierwszego wymiaru tablicy (bez komentarza sciana.gif )

Nawiasem mówiąc, napisałem "Wykropkowałem wartości, ponieważ nie są istotne.",
skrypt "wpinam w stronę" za pomocą greasemonkey w FF3, pobieram stringi
z elementów HTML, wtedy je sortuje smile.gif

Pozdrawiam.

[ZAMYKAMY]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.