Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   javascript сортировка option и value по алфавиту (https://javascript.ru/forum/dom-window/74169-javascript-sortirovka-option-i-value-po-alfavitu.html)

laimas 19.06.2018 22:35

Цитата:

Сообщение от рони
с новым набором будет иной код ... какое будет тз, такая и будет сортировка, ...

Не много ли случаев? :) Писать так уж пользовательскую сортировку сразу, так как с буквенно-цифровыми строками не достаточно только a > b ? 1 : a < b ? -1 : 0.

рони 19.06.2018 22:50

laimas,
бред какой-то ... я писал выше, что не понимаю ...

Alexandroppolus 19.06.2018 23:02

Цитата:

Сообщение от j0hnik (Сообщение 487777)
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; })

Alexandroppolus 19.06.2018 23:15

laimas,

не совсем понял, какую мысль ты хочешь донести.
есть sort, который сортирует элементы как строки, по возрастанию
для любого другого кейса не обойтись без кастомной функции сравнения
в чем загвоздка?

laimas 20.06.2018 04:03

Никакого подвоха, но не под каждое же имя файла своя функция. А такого добра много, адреса и т.п.

j0hnik 20.06.2018 04:47

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);
}));

laimas 20.06.2018 05:14

j0hnik,
ну чего под ответ подгонять :) Сразу пишите функцию для натуральной сортировки (хотя для JS это уже давно написано), а данная то опять для этого конкретного случая.

рони 20.06.2018 07:46

Цитата:

Сообщение от laimas
Сразу пишите функцию для натуральной сортировки (хотя для JS это уже давно написано),

можно узнать о чём речь?

laimas 20.06.2018 08:08

Цитата:

Сообщение от рони
можно узнать о чём речь?

Достаточно заменить в коде j0hnik, массив, и пусть это будут например адреса - ["a 10a", "a 1b", "a 2", "a 1"], и не получим желаемого, ибо его код "подогнан" под конкретный вопрос. Что же не написать одну пользовательскую функцию, а не всякий раз новую под конкретный случай? Проблемы когда строка, это числа и буквы ведь давно известна, поэтому и решения готовые уже давно есть/предлагаются.

А если стоит задача сортировки, к примеру, списка файлов, с возможностью сортировки по набору параметров (пусть отсортировать по типу файлов и имени, то есть первичное тип, а в нем уже имена и т.п.), тогда да, это можно считать узко специализированной задачей (ТЗ), заточили под нее скрипт.

рони 20.06.2018 08:51

Цитата:

Сообщение от laimas
решения готовые уже давно есть/предлагаются.

спасибо


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