• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie tabeli - jquery

Object Storage Arubacloud
0 głosów
524 wizyt
pytanie zadane 17 września 2018 w JavaScript przez patrykps Nowicjusz (140 p.)

Dzień dobry,
Mam problem z posortowaniem tabeli w jquery.. Chcę sparować ze sobą rzędy, w których nie powtarza się nawet jedna komórka z kolumn 'wiek', 'drużyna' i 'dzielnica'. Próbowałem tablesortem i pętlami, ale mam totalne zaćmienie. Wiem, że zadanie jest dosyć proste, ale utknąłem i nie mogę ruszyć dalej ..Będę wdzięczny za pomoc.

<table id="employees" class="tablesorter">
  <thead>
    <tr>
			<th>Num.</th>
			<th>Name</th>
			<th>Age</th>
			<th>Team</th>
			<th>Downtown</th>
    </tr>
  </thead>
  <tbody>
    <tr>
			<td>1.</td>
			<td>Alan Shark</td>
			<td>21</td>
			<td>4</td>
			<td>Gaj</td>
    </tr>
    <tr>
			<td>2.</td>
			<td>Amanda Parker</td>
			<td>31</td>
			<td>4</td>
			<td>Gaj</td>
    </tr>
		<tr>
			<td>3.</td>
			<td>Jeny Parker</td>
			<td>20</td>
			<td>4</td>
			<td>Gaj</td>
    </tr>
    <tr>
			<td>4.</td>
			<td>Gary Smith</td>
			<td>30</td>
			<td>6</td>
			<td>Krzyki</td>
    </tr>
    <tr>
			<td>5.</td>
			<td>Sophia Low</td>
			<td>23</td>
			<td>10</td>
			<td>Południe</td>
    </tr>
		<tr>
			<td>6.</td>
			<td>Sophia Low</td>
			<td>23</td>
			<td>10</td>
			<td>Południe</td>
    </tr>
    <tr>
			<td>7.</td>
			<td>Daren Novak</td>
			<td>22</td>
			<td>2</td>
			<td>Grunwald</td>
    </tr>
		<tr>
			<td>8.</td>
			<td>Amanda Parker</td>
			<td>31</td>
			<td>4</td>
			<td>Gaj</td>
    </tr>
		<tr>
			<td>9.</td>
			<td>Gary Smith</td>
			<td>30</td>
			<td>6</td>
			<td>Krzyki</td>
    </tr>
  </tbody>
</table>

 

komentarz 17 września 2018 przez StOcK Mądrala (6,100 p.)
Sparować?

Na podanym przykładzie masz 9 wierszy. Pokaż co chcesz osiągnąć.
komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)

Tak, domyślnie wierszy będzie więcej. Np.

1. Alan Shark         21 4     Gaj Yes
2. Gary Smith        30 6     Krzyki No
1. Amanda Parker 31 4     Gaj No
2. Sophia Low        23 10 Południe Yes
1. Amanda Parker  20 4   Gaj No

 Tak powinno to się układać, czyli w parze nie mogą być rzędy których wartość, nawet jednego z pól 'wiek', 'druzyna', 'dzielnica', powtarza się. Zapisałbym to tak: tr[i][j] !== tr[i+1][j], gdzie j to wartość komórki td.

komentarz 18 września 2018 przez TakIoKoder Bywalec (2,560 p.)
Troche cięzko zrozumieć logikę tego parowania.
komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
Wydaję mi się, że logiki nie należy się tutaj doszukiwać, bardziej chodzi o sprawdzenie umiejętności :) Tablesorter 2.0 posortuje praktycznie na wszystkie logiczne sposoby tablicę, więc zazwyczaj nie trzeba się z tym męczyć za bardzo, ale tutaj niestety dostałem bardziej wyszukane zadanie :)
komentarz 18 września 2018 przez StOcK Mądrala (6,100 p.)
Dużo masz tych wierszy?

Ja bym kombinował w ten sposób:

Funkcja, która sprawdza dwa wiersze, jeśli się wartości nie powtarzają to je praruje, a później pętla
komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)

Ma być około 60. Ja kombinowałem tak:
 

$(document).ready(function() {
	var alltr = $('tbody tr');
	for (var i=alltr.length; i--;) {
		for (var j=alltr[i].length; j--;) {
			console.log(alltr[i][j])
			if(alltr[i][j].text()===alltr[i--][j].text()) {
				console.log(alltr[i][j]);
			}
		}
	}
});

I jeżeli już bym wiedział które się powtarzają to wtedy dotarłbym do ich rodziców, czyli tr i przesunał caly wiersz na przykład o dwa do przodu, tak żeby nie były obok siebie. Ale ta podwójna pętla mnie chyba nie prowadzi tam gdzie trzeba..

komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
$(document).ready(function() {
	var alltr = $('tbody tr');
	for (var i=0; i<alltr.length; i++) {
		for (var j=0; j<alltr[i].length; j++) {
			console.log(alltr[i][j])
			if(alltr[i][j].text()===alltr[i++][j].text()) {
				console.log(alltr[i][j]);
			}
		}
	}
});

Tak jaśniej, bez tej odwróconej pętli

komentarz 18 września 2018 przez StOcK Mądrala (6,100 p.)
To ma sprawdzać wiersze każdy z każdym?

Czy tylko pierwszy z drugim, drugi z trzecim, trzeci z czwartym itp?
komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)

No tak chciałem zrobić, a później przesuwać wiersze.
 

$(document).ready(function() {
	var alltr = $('tbody tr');
	for (var i=alltr.length; i--;) {
		var array = [];
		array.push(alltr.eq(i).text())
		console.log(array);
		// for (var j=alltr[i].length; j--;) {
		// 	console.log(alltr[i][j])
		// 	if(alltr[i][j].text()===alltr[i--][j].text()) {
		// 		console.log(alltr[i][j]);
		// 	}
		// }
	}
});

Tak tworzy mi tablice ze stringami..

komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
Wystarczy pierwszy z drugim i drugi z trzecim, ponieważ obok siebie nie mogą być te wiersze, ktorych wartości sie powtarzają
komentarz 18 września 2018 przez StOcK Mądrala (6,100 p.)

@patrykps, mi wyszło, że dla tych 9 wierszy wynikiem będzie 56 par, tak?

hah, raczej dwa razy mniej, bo sprawdza mi np. Alan Shark z Gary Smith, a potem na odwrót

komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
Trochę inaczej, chodzi o to, aby wierszach 'i' oraz 'i++' wartości kolumn dotyczących wieku, druzyny i dzielnicy różniły się. Czyli jeżeli w pierwszym wierszu wiek osoby wynosi 34 lata, to w drugim wierszu wiek osoby musi być rożny od 34. I chodzi o to, żeby zgodnie z tym założeniem posortować tabelę, albo stworzyć pary.
komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
Tak jest źle:
            <td>1.</td>
            <td>Alan Shark</td>
            <td>21</td>
            <td>4</td>
            <td>Gaj</td>

            <td>2.</td>
            <td>Amanda Parker</td>
            <td>31</td>
            <td>4</td> !!
            <td>Gaj</td> !!
 A tak prawidłowo:
            <td>1.</td>
            <td>Alan Shark</td>
            <td>21</td>
            <td>4</td>
            <td>Gaj</td>

            <td>2.</td>
            <td>Jenny Parker</td>
            <td>31</td>
            <td>1</td> 
            <td>Południe</td> 

I podobierać tak wiersze w pary 

 

komentarz 18 września 2018 przez StOcK Mądrala (6,100 p.)

W takim razie wychodzi mi tylko 5 par

// EDIT

Przepraszam, ale nie operujemy chyba na tych samych danych u mnie jest

3. Jeny Parker 20 4

Gaj

komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
To właśnie chyba tak będzie :D A mógłbym chociaż jakąś wskazówkę? ;>
1
komentarz 18 września 2018 przez StOcK Mądrala (6,100 p.)
pary to sprawdzanie każdy z każdym, pary2 to tylko obecny wiersz z następnym.

Funkcja, która porównuje dwa wiersze, a później pętla po tablicy

https://codepen.io/anon/pen/KxroVO
komentarz 18 września 2018 przez patrykps Nowicjusz (140 p.)
Nie doceniłem trochę tego zadania.. Dziękuję bardzo za pomoc :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 1,209 wizyt
pytanie zadane 14 września 2017 w JavaScript przez Caesar Początkujący (310 p.)
0 głosów
3 odpowiedzi 565 wizyt
0 głosów
1 odpowiedź 528 wizyt
pytanie zadane 20 marca 2016 w JavaScript przez Magneto Nowicjusz (160 p.)

92,554 zapytań

141,400 odpowiedzi

319,537 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...