Причина, по которой функция сортировки ведет себя так странно
Из документации :
[...] массив сортируется в соответствии с кодовой точкой Unicode каждого символа
значение в соответствии со строковым преобразованием каждого элемента.
Если вы напечатаете значения точки в юникоде массива, тогда он очистится.
console.log("140000".charCodeAt(0));
console.log("104".charCodeAt(0));
console.log("99".charCodeAt(0));
//Note that we only look at the first index of the number "charCodeAt( 0 )"
Возвращает: "49, 49, 57".
49 (unicode value of first number at 140000)
49 (unicode value of first number at 104)
57 (unicode value of first number at 99)
Теперь, поскольку 140000 и 104 вернули одинаковые значения (49), он обрезает первый индекс и проверяет снова:
console.log("40000".charCodeAt(0));
console.log("04".charCodeAt(0));
//Note that we only look at the first index of the number "charCodeAt( 0 )"
52 (unicode value of first number at 40000)
40 (unicode value of first number at 04)
Если мы отсортируем это, то получим:
40 (unicode value of first number at 04)
52 (unicode value of first number at 40000)
, поэтому 104 предшествует 140000.
Итак, окончательный результат будет:
var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray)
104, 140000, 99
Вывод:
sort()
выполняет сортировку, просматривая только первый индекс чисел. sort()
не заботится о том, что целое число больше другого, оно сравнивает значение юникода цифр, а если есть два равных значения юникода, то проверяет, есть ли следующая цифра, и сравнивает ее.
Для правильной сортировки необходимо передать функцию сравнения в sort()
, как объяснено здесь .