Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 17.08.2020, 12:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Я в том смысле - результат работы Эдоб кому-то предназначается в конечном итоге или нет. Если да, то как бы без разницы порядок, потребитель сам будет предоставлять как ему нужно.
Если нет, то ошибки в Эдоб у вас скорее всего связаны с синтаксисом, то есть, вы не портируете предложенное, а используете как есть.
Ответить с цитированием
  #12 (permalink)  
Старый 17.08.2020, 12:47
Новичок на форуме
Отправить личное сообщение для koros Посмотреть профиль Найти все сообщения от koros
 
Регистрация: 13.08.2020
Сообщений: 6

Сообщение от laimas Посмотреть сообщение
Я в том смысле - результат работы Эдоб кому-то предназначается в конечном итоге или нет. Если да, то как бы без разницы порядок, потребитель сам будет предоставлять как ему нужно.
Честно говоря, я недопонял вашего вопроса. Результат работы нужен мне. Порядок, в котором обрабатываются файлы важен тоже мне. Переставлять что-либо после работы скрипта я не хочу. Что не так? Или мне надо что-то сделать скриптом, а остальное - в ручную?
Сообщение от laimas Посмотреть сообщение
Если нет, то ошибки в Эдоб у вас скорее всего связаны с синтаксисом, то есть, вы не портируете предложенное, а используете как есть.
В Adobe у меня нет ошибок (я имею в виду то, что предложил уважаемый voraa), просто скрипт не делает почему-то то, что надо. Если имеются в виду ошибки при работе скрипта от уважаемого рони, то непонятно, как портировать его скрипт. В Adobe используются стандартные конструкции языка JavaScript и специфические для его программ. Конкретно в сабже используются стандартные конструкции языка JavaScript.
Ответить с цитированием
  #13 (permalink)  
Старый 17.08.2020, 14:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от koros
Честно говоря, я недопонял вашего вопроса.
То есть, результат в конечном итоге будет передан на сервер. Ну если для себя, значит нет.
Сообщение от koros
В Adobe у меня нет ошибок
Я не специалист ActionScript, но когда-то что-от простое для Фотошоп писал, из под консоли ActionScript, которая также устанавливалась с пакетом программ. Вроде бы как в ActionScript есть строгая типизация, то есть, например, объявление переменной, это var a:Array = ... Или это старое и теперь не так, или я просто с чем-то путаю?

Вот из темы ранее обсуждаемой, это работает, по крайней мере проверялось. Попробуйте, да и в сети готового js-кода по натуральной сортировке много и всякого разного.
Ответить с цитированием
  #14 (permalink)  
Старый 17.08.2020, 17:31
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

Сообщение от koros
Если не сложно - проверьте, пожалуйста, на adobe extendscript toolkit cc.
Проверил и немного охренел
Почему

var a = 'B';
var b = 'a8';
a = a.toLowerCase();
b= b.toLowerCase();
var x = a>b? 1 : a<b? -1 : 0;
print(x)


выдает x = -1 мне никогда не понять.

ЗЫ Самое интересное, что
var a = 'B';
var b = 'a8';
a = a.toLowerCase();
b= b.toLowerCase();
var c = a>b
print (c);
var x = a>b? 1 : a<b? -1 : 0;
print(x)

выдает c = true, а x = -1

Последний раз редактировалось voraa, 17.08.2020 в 17:41.
Ответить с цитированием
  #15 (permalink)  
Старый 17.08.2020, 18:30
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

До меня, наконец, дошел весь ужас ситуации.
Извращенцы из Adobe изгадили оператор ?:
Он у них ассоциативен слева-направо!!!
x = a>b? 1 : a<b? -1 : 0
выполняется, как
x = ( a>b ? 1 : a<b ) ? -1 : 0
со всеми вытекающими.

После расстановки скобок должно работать и в браузере и в Адобах

<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>


ЗЫ
В документации по ActionScript все равно говорится, что ?: правоассоциатевен
The assignment operators and the conditional ( ?: ) operator are right-associative, which means that the operators on the right are processed before operators on the left.
https://help.adobe.com/en_US/as3/lea...8a9b90204-7f6c

Наверно я чего то не врубаю.
var a = 3;
var b = 2;
var x = a>b? 1 : a<b? -1 : 0;
print(x)

выдает -1
а
var a = 3;
var b = 2;
var x = a>b? 1 : (a<b? -1 : 0);
print(x)

выдает 1, как и положено.

Последний раз редактировалось voraa, 17.08.2020 в 21:08.
Ответить с цитированием
  #16 (permalink)  
Старый 18.08.2020, 09:22
Новичок на форуме
Отправить личное сообщение для koros Посмотреть профиль Найти все сообщения от koros
 
Регистрация: 13.08.2020
Сообщений: 6

voraa,
Большое спасибо за помощь. Я немного подредактировал ваш скрипт и у меня заработало:
function nsort (a,b) {
		a = decodeURIComponent(a.name).toLowerCase();
		b = decodeURIComponent(b.name).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].localeCompare(rb[1]);
			}
			if(ra[5].length || rb[5].length) return nsort(ra[5], rb[5]);
			return 0;
		}
		return a.localeCompare(b);
	}

decodeURIComponent(a.name).toLowerCase() - потому что у меня в массиве хранятся файлы.

Большое спасибо всем поучаствовавшим за помощь.

Последний раз редактировалось koros, 18.08.2020 в 09:54.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача сортировка одномерного массива Helen_Kim Общие вопросы Javascript 1 28.04.2019 15:04
Ввод и сортировка массива Neotwalker Элементы интерфейса 2 05.04.2018 00:14
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Сортировка массива по ключу RazZzeR Элементы интерфейса 9 21.07.2012 19:31
Сортировка двумерного массива методом пузырька lammeR Общие вопросы Javascript 31 01.07.2012 20:48