Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   сортировка строк таблицы (https://javascript.ru/forum/css-html/70877-sortirovka-strok-tablicy.html)

atanov 10.01.2018 15:40

Цитата:

что они возвращают из функции 1 или -1 или 0 если up == true и -1, 1, 0 если up == false или не указан.
вариант использования
Позанудствую - а можете в "длинном" виде это написать?

рони 10.01.2018 15:41

atanov,
функция сортировки должна возвращать три состония 1, -1, 0
ваша compare возвращала только 1 и 0, в этом и была проблема.

рони 10.01.2018 15:50

atanov,
function compareNumeric(a, b) {
  if (a > b) if(up) {return 1} else {return -1};
  if (a < b) if(up) {return -1} else {return 1};
  return 0;//лишняя строка, функции без явного указания возврают false, что Array.sort воспринимает как ноль
}

atanov 10.01.2018 15:53

ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!

рони 10.01.2018 16:13

универсальная сортировка строк
 
atanov,
сортирует числа и строки, достаточно указать индекс ячейки и направление сортировки (в примере первая колонка, возрастание)
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>

<body>
<table width="400" id="alltable" >
	<thead>
		<tr>
			<th>Title 1</th>
			<th>Title 2</th>
			<th>Title 3</th>
		</tr>
	</thead>
	<tbody>
	    <tr>
			<td>100</td>
			<td>B</td>
			<td>B</td>
		</tr>
		<tr>
			<td>300</td>
			<td>C</td>
			<td>C</td>
		</tr>
		<tr>
			<td>50</td>
			<td>A</td>
			<td>A</td>
		</tr>
	</tbody>
</table>
  <script>
function sorttable(table, index, up) {
  var tbody = table.querySelector("tbody");
  var rowsArray = [].slice.call(tbody.rows);
  var compare = function compareNumeric(a, b) {
    a = a.cells[index].textContent.trim();
    b = b.cells[index].textContent.trim();
    if(a == +a) return up ? a - b : b - a;
    if (a > b) {
      return up ? 1 : -1;
    }
    if (a < b) {
      return up ? -1 : 1;
    }
  };
  var temp = document.createDocumentFragment();
  rowsArray.sort(compare).forEach(function(a) {
    temp.appendChild(a);
  });
  tbody.appendChild(temp);
}
;

var table = document.querySelector("#alltable");
sorttable (table, 0,true)
  </script>
</body>
</html>

atanov 10.01.2018 17:51

рони, и опять же глобальное спасибо
Исчо тогда поспрашиваю.
1. В предпоследнем посте строка 45 "if (a > b) if(up)", два подряд ифа, это нормально? Я поначалу не обратил внимание на это. Если да, то как оно работает или где почитать об ентом?
2. В последнем посте .trim() - обязательно нужон? Да цифер понятно, но если строки, он вроде ничего не делает.
3. В последнем посте, стыдно спросить - в строке 45 '+a', что это?

рони 10.01.2018 18:02

Цитата:

Сообщение от atanov
3.

кустарная проверка, на то что данная строка, это число.
Цитата:

Сообщение от atanov
1.

так лучше ?
if (a > b) {if(up) {return 1} else {return -1}};

Цитата:

Сообщение от atanov
Да цифер понятно, но если строки

циферкам как раз пофигу на пробелы вначале конце, trim это на всякий случай

atanov 10.01.2018 18:10

Цитата:

так лучше ?
if (a > b) {if(up) {return 1} else {return -1}};
Ну конэчно!
Блин, чтож в учебниках не пишуть, вот хорошо, что Вы разжевали :)


Часовой пояс GMT +3, время: 13:32.