До меня, наконец, дошел весь ужас ситуации.
Извращенцы из 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, как и положено.