Telnet |
Отправлено: 21 Марта, 2015 - 22:22:33
|
Частый гость
Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011
Помог: 1 раз(а)
|
Всем привет.
Есть массив массивов дат, строк и чисел мне его нужно отсортировать по различным полям по возрастанию или по убыванию в зависимости от действий пользователя
массив примерно такой
5 2015-03-18 09:53:33 Вася
1 2015-03-21 17:30:00 Петя
9 2015-03-18 15:57:33 Вася
7 2015-03-19 18:53:16 Вася
8 2015-03-18 09:16:00 Петя
3 2015-03-19 18:53:04 Петя
4 2015-03-18 16:00:40 Вася
5 2015-03-18 16:01:46 Петя
6 2015-03-18 16:48:52 Игорь
10 2015-03-21 10:52:41 Юра
(Добавление)
Сделал может кому пригодится
CODE ( javascript):
скопировать код в буфер обмена
// Функции сортировки по id function sIdAsc(a, b) { if (a[0] > b[0]) return 1; else if (a[0] < b[0]) return -1; else return 0; } function sIdDesc(a, b) { if (a[0] < b[0]) return 1; else if (a[0] > b[0]) return -1; else return 0; } // Функции сортировки по дате function sDateAsc(a, b) { if (a[1] > b[1]) return 1; else if (a[1] < b[1]) return -1; else return 0; } function sDateDesc(a, b) { if (a[1] < b[1]) return 1; else if (a[1] > b[1]) return -1; else return 0; } // Функции сортировки по имени function sNameAsc(a, b) { if (a[2] > b[2]) return 1; else if (a[2] < b[2]) return -1; else return 0; } function sNameDesc(a, b) { if (a[2] < b[2]) return 1; else if (a[2] > b[2]) return -1; else return 0; } console.log('Фильт по id убывание'); sorting.sort(sIdAsc); console.log(sorting.join('\n')); console.log('Фильт по Date убывание'); sorting.sort(sDateAsc); console.log(sorting.join('\n')); console.log('Фильт по Name убывание'); sorting.sort(sNameAsc); console.log(sorting.join('\n')); console.log('Фильт по id возрастание'); sorting.sort(sIdDesc); console.log(sorting.join('\n')); console.log('Фильт по Date возрастание'); sorting.sort(sDateDesc); console.log(sorting.join('\n')); console.log('Фильт по Name возрастание'); sorting.sort(sNameDesc); console.log(sorting.join('\n')); console.log('------------------------');
То что имеем на выходе
Изначальный массив
53,2015-03-18 09:53:33,Super User
63,2015-03-21 17:30:00,Super User
53,2015-03-18 09:53:33,Super User
62,2015-03-21 10:52:41,test
56,2015-03-18 15:57:33,Super User
61,2015-03-19 18:53:16,Super User
51,2015-03-18 09:16:00,Super User
60,2015-03-19 18:53:04,Super User
57,2015-03-18 16:00:40,Super User
58,2015-03-18 16:01:46,Super User
59,2015-03-18 16:48:52,Super User
Фильт по id убывание
51,2015-03-18 09:16:00,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
56,2015-03-18 15:57:33,Super User
57,2015-03-18 16:00:40,Super User
58,2015-03-18 16:01:46,Super User
59,2015-03-18 16:48:52,Super User
60,2015-03-19 18:53:04,Super User
61,2015-03-19 18:53:16,Super User
62,2015-03-21 10:52:41,test
63,2015-03-21 17:30:00,Super User
Фильт по Date убывание
51,2015-03-18 09:16:00,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
56,2015-03-18 15:57:33,Super User
57,2015-03-18 16:00:40,Super User
58,2015-03-18 16:01:46,Super User
59,2015-03-18 16:48:52,Super User
60,2015-03-19 18:53:04,Super User
61,2015-03-19 18:53:16,Super User
62,2015-03-21 10:52:41,test
63,2015-03-21 17:30:00,Super User
Фильт по Name убывание
58,2015-03-18 16:01:46,Super User
51,2015-03-18 09:16:00,Super User
53,2015-03-18 09:53:33,Super User
56,2015-03-18 15:57:33,Super User
57,2015-03-18 16:00:40,Super User
53,2015-03-18 09:53:33,Super User
59,2015-03-18 16:48:52,Super User
60,2015-03-19 18:53:04,Super User
61,2015-03-19 18:53:16,Super User
63,2015-03-21 17:30:00,Super User
62,2015-03-21 10:52:41,test
Фильт по id возрастание
63,2015-03-21 17:30:00,Super User
62,2015-03-21 10:52:41,test
61,2015-03-19 18:53:16,Super User
60,2015-03-19 18:53:04,Super User
59,2015-03-18 16:48:52,Super User
58,2015-03-18 16:01:46,Super User
57,2015-03-18 16:00:40,Super User
56,2015-03-18 15:57:33,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
51,2015-03-18 09:16:00,Super User
Фильт по Date возрастание
63,2015-03-21 17:30:00,Super User
62,2015-03-21 10:52:41,test
61,2015-03-19 18:53:16,Super User
60,2015-03-19 18:53:04,Super User
59,2015-03-18 16:48:52,Super User
58,2015-03-18 16:01:46,Super User
57,2015-03-18 16:00:40,Super User
56,2015-03-18 15:57:33,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
51,2015-03-18 09:16:00,Super User
Фильт по Name возрастание
62,2015-03-21 10:52:41,test
58,2015-03-18 16:01:46,Super User
61,2015-03-19 18:53:16,Super User
60,2015-03-19 18:53:04,Super User
59,2015-03-18 16:48:52,Super User
63,2015-03-21 17:30:00,Super User
57,2015-03-18 16:00:40,Super User
56,2015-03-18 15:57:33,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
51,2015-03-18 09:16:00,Super User
------------------------
|
|
|
exlant |
Отправлено: 22 Марта, 2015 - 00:30:06
|
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
|
с начало блин сделал на php, потом заметил, что форум по js пришлось переделывать!
CODE ( javascript):
скопировать код в буфер обмена
var array = [ [5, "2015-03-18", "09:53:33", "Вася"], [1, "2015-03-21", "17:30:00", "Петя"], [9, "2015-03-18", "15:57:33", "Вася"], [7, "2015-03-19", "18:53:16", "Вася"], [8, "2015-03-18", "09:16:00", "Петя"], [3, "2015-03-19", "18:53:04", "Петя"], [4, "2015-03-18", "16:00:40", "Вася"], [5, "2015-03-18", "16:01:46", "Петя"], [6, "2015-03-18", "16:48:52", "Игорь"], [10, "2015-03-21", "10:52:41", "Юра"] ]; var key = 0; // ключ массива var type = 1; // в каком направлении сортировать 1 - сверху вниз, 0 - снизу вверх function asort(a,b){ if(a[key] === b[key]) return 0; if(type === 1){ return (a[key] > b[key]) ? +1 : -1; }else{ return (a[key] < b[key]) ? +1 : -1; } } console.log(array.sort(asort));
|
|
|
LIME |
Отправлено: 22 Марта, 2015 - 06:50:48
|
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
|
ну вот в итоге как-то так
CODE ( javascript):
скопировать код в буфер обмена
var array = [ [5, "2015-03-18", "09:53:33", "Вася"], [1, "2015-03-21", "17:30:00", "Петя"], [9, "2015-03-18", "15:57:33", "Вася"], [7, "2015-03-19", "18:53:16", "Вася"], [8, "2015-03-18", "09:16:00", "Петя"], [3, "2015-03-19", "18:53:04", "Петя"], [4, "2015-03-18", "16:00:40", "Вася"], [5, "2015-03-18", "16:01:46", "Петя"], [6, "2015-03-18", "16:48:52", "Игорь"], [10, "2015-03-21", "10:52:41", "Юра"] ]; Array.prototype.usort = function(key, direction){ direction = direction == -1 ? -1 : 1; return this.sort(function(a,b){ if(a[key] == b[key]) return 0; return direction * (a[key] > b[key] ? +1 : -1) ; }); } console.log(array.usort(1, -1)); console.log(array.usort(1));
(Отредактировано автором: 22 Марта, 2015 - 08:18:52)
|
|
|
LIME |
Отправлено: 22 Марта, 2015 - 12:40:22
|
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
|
exlant замыкание
PHP:
скопировать код в буфер обмена
function mySort(&$arr, $key, $direction = 1){ $direction = $direction == -1 ? -1 : 1; usort($arr, function($a,$b) use ($key, $direction){ if ($a[$key] == $b[$key]) { return 0; } return $direction * ($a[$key] < $b[$key] ? -1 : 1); }); } mySort($arr, 1, -1); mySort($arr, 1);
|
|
|
|