Я в том смысле - результат работы Эдоб кому-то предназначается в конечном итоге или нет. Если да, то как бы без разницы порядок, потребитель сам будет предоставлять как ему нужно.
Если нет, то ошибки в Эдоб у вас скорее всего связаны с синтаксисом, то есть, вы не портируете предложенное, а используете как есть. |
Цитата:
Цитата:
|
Цитата:
Цитата:
Вот из темы ранее обсуждаемой, это работает, по крайней мере проверялось. Попробуйте, да и в сети готового js-кода по натуральной сортировке много и всякого разного. |
Цитата:
Почему 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 |
До меня, наконец, дошел весь ужас ситуации.
Извращенцы из 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,
Большое спасибо за помощь. Я немного подредактировал ваш скрипт и у меня заработало: 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() - потому что у меня в массиве хранятся файлы. Большое спасибо всем поучаствовавшим за помощь. |
Часовой пояс GMT +3, время: 21:26. |