10.01.2018, 15:40
|
Профессор
|
|
Регистрация: 27.06.2016
Сообщений: 180
|
|
Цитата:
|
что они возвращают из функции 1 или -1 или 0 если up == true и -1, 1, 0 если up == false или не указан.
вариант использования
|
Позанудствую - а можете в "длинном" виде это написать?
|
|
10.01.2018, 15:41
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
atanov,
функция сортировки должна возвращать три состония 1, -1, 0
ваша compare возвращала только 1 и 0, в этом и была проблема.
|
|
10.01.2018, 15:50
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
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 воспринимает как ноль
}
Последний раз редактировалось рони, 10.01.2018 в 15:58.
|
|
10.01.2018, 15:53
|
Профессор
|
|
Регистрация: 27.06.2016
Сообщений: 180
|
|
ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!
|
|
10.01.2018, 16:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
универсальная сортировка строк
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>
|
|
10.01.2018, 17:51
|
Профессор
|
|
Регистрация: 27.06.2016
Сообщений: 180
|
|
рони, и опять же глобальное спасибо
Исчо тогда поспрашиваю.
1. В предпоследнем посте строка 45 "if (a > b) if(up)", два подряд ифа, это нормально? Я поначалу не обратил внимание на это. Если да, то как оно работает или где почитать об ентом?
2. В последнем посте .trim() - обязательно нужон? Да цифер понятно, но если строки, он вроде ничего не делает.
3. В последнем посте, стыдно спросить - в строке 45 '+a', что это?
Последний раз редактировалось atanov, 10.01.2018 в 17:53.
|
|
10.01.2018, 18:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
кустарная проверка, на то что данная строка, это число.
так лучше ?
if (a > b) {if(up) {return 1} else {return -1}};
Сообщение от atanov
|
Да цифер понятно, но если строки
|
циферкам как раз пофигу на пробелы вначале конце, trim это на всякий случай
|
|
10.01.2018, 18:10
|
Профессор
|
|
Регистрация: 27.06.2016
Сообщений: 180
|
|
Цитата:
|
так лучше ?
if (a > b) {if(up) {return 1} else {return -1}};
|
Ну конэчно!
Блин, чтож в учебниках не пишуть, вот хорошо, что Вы разжевали
|
|
|
|