19.06.2018, 22:35
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от рони
|
с новым набором будет иной код ... какое будет тз, такая и будет сортировка, ...
|
Не много ли случаев? Писать так уж пользовательскую сортировку сразу, так как с буквенно-цифровыми строками не достаточно только a > b ? 1 : a < b ? -1 : 0.
|
|
19.06.2018, 22:50
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
laimas,
бред какой-то ... я писал выше, что не понимаю ...
|
|
19.06.2018, 23:02
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от j0hnik
|
Alexandroppolus,
может и есть но, с маленьким вроде все логично выводит, а там пытается "хитрить"
|
да нет никакой хитрости, результат логичный в обоих кейсах.
сейчас посмотрел в консоли, что выведет
var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function(a, b) { console.log(a, b, arr); return 1; })
судя по логу, тут "сортировка вставками". И в callback элементы попадают ровно в той последовательности, в какой изначально друг относительно друга находятся.
а если длина более 10, то используется "быстрая сортировка", с перекидываниями элементов туда-сюда, и пары образуются как возрастающие, так и убывающие
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
arr.sort(function(a, b) { console.log(a, b, arr); return 1; })
|
|
19.06.2018, 23:15
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
laimas,
не совсем понял, какую мысль ты хочешь донести.
есть sort, который сортирует элементы как строки, по возрастанию
для любого другого кейса не обойтись без кастомной функции сравнения
в чем загвоздка?
|
|
20.06.2018, 04:03
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Никакого подвоха, но не под каждое же имя файла своя функция. А такого добра много, адреса и т.п.
|
|
20.06.2018, 04:47
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
console.log(["iag12.png", "iq10.png", "img2.png", "img1.png"].sort(function(a, b) {
var aw = a.match(/\D+/)[0],
bw = b.match(/\D+/)[0],
ad = a.match(/\d+/)[0],
bd = b.match(/\d+/)[0];
return (aw > bw) - (aw < bw) || (ad-bd) - (bd-ad);
}));
|
|
20.06.2018, 05:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
j0hnik,
ну чего под ответ подгонять Сразу пишите функцию для натуральной сортировки (хотя для JS это уже давно написано), а данная то опять для этого конкретного случая.
|
|
20.06.2018, 07:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от laimas
|
Сразу пишите функцию для натуральной сортировки (хотя для JS это уже давно написано),
|
можно узнать о чём речь?
|
|
20.06.2018, 08:08
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от рони
|
можно узнать о чём речь?
|
Достаточно заменить в коде j0hnik, массив, и пусть это будут например адреса - ["a 10a", "a 1b", "a 2", "a 1"], и не получим желаемого, ибо его код "подогнан" под конкретный вопрос. Что же не написать одну пользовательскую функцию, а не всякий раз новую под конкретный случай? Проблемы когда строка, это числа и буквы ведь давно известна, поэтому и решения готовые уже давно есть/предлагаются.
А если стоит задача сортировки, к примеру, списка файлов, с возможностью сортировки по набору параметров (пусть отсортировать по типу файлов и имени, то есть первичное тип, а в нем уже имена и т.п.), тогда да, это можно считать узко специализированной задачей (ТЗ), заточили под нее скрипт.
|
|
20.06.2018, 08:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от laimas
|
решения готовые уже давно есть/предлагаются.
|
спасибо
|
|
|
|