Показать сообщение отдельно
  #7 (permalink)  
Старый 14.08.2020, 12:05
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Вот, что то такое изобрел. Может пойдет в Adobe

<script>
 
function nsort (a,b) {
	a = a.toLowerCase();
	b = b.toLowerCase();
	var re = /(\D*)((0*)(\d*))(.*)/;
	var ra = re.exec(a)
	var rb = re.exec(b)
	if (ra[4].length && rb[4].length) {
		if(ra[1] === rb[1]) {
			if (ra[3].length != rb[3].length) return rb[3].length - ra[3].length 
			var na = +ra[2]
			var nb = +rb[2]
			if (na != nb) return na - nb;
		} else {
			return ra[1]>rb[1]? 1 : (ra[1]<rb[1]? -1 : 0);
		}
		if (ra[5].length || rb[5].length) return nsort(ra[5], rb[5])
        return 0;
	}
	return a>b? 1 : (a<b? -1 : 0);
}
 const arr = ["A", "B", "C", "x1a3", "x1a", "x1b", "x01a", "011", "g10", "x1a02", "g8", "g1", "g01", "g001", "g081", "11", "H", "x1a2", "b0", "b00"]
arr.sort(nsort)
console.log(arr)
 document.write(JSON.stringify(arr))
</script>


Предполагается, что x001 < x01 <x1, но x0 < x00

Последний раз редактировалось voraa, 17.08.2020 в 18:41.
Ответить с цитированием