Я пишу это для людей, которые начинают изучать основы сортировки массивов JavaScript. У меня возникла проблема, когда я впервые начал использовать эту функцию. Я занимался парным программированием с другими людьми на веб-сайте leetcode, и у нас были те же проблемы с числовой сортировкой. Поэтому я хотел бы поделиться своим опытом, как избежать подобных проблем.
Ниже приведена проблема с кодом leetcode: 977. Квадраты отсортированного массива
var sortedSquares = function(nums) { let array = nums.map( num => num*num) return array.sort((a,b) => (a-b)) };
Я решил, создав новый массив из функции карты и возведя в квадрат каждое значение. Это привело к тому, что каждое число было в неубывающем порядке в условии. Следующим шагом была сортировка чисел. Я прочитал документы и попытался реализовать функцию сортировки следующим образом:
var sortedSquares = function(nums) { let array = nums.map( num => num*num) return array.sort() };
Затем я получил такой результат: «Вывод: [0, 1, 100, 16, 9]». Я не понимал, почему числа отсортированы неправильно, и мне нужно было больше узнать, почему это происходит.
Я узнал, что все не неопределенные числа читаются в «строках» и сравниваются в порядке кодовых единиц UTF-16. Это означает, что каждое первое число в наборе упорядочивается первым, прежде чем рассматривать остальные числа, которые следуют. Например, «10» читается как «1», за которым следует «0». В результате «10» будет заказано перед «9».
Чтобы решить эту проблему, мне пришлось использовать функцию сравнения (выражения стрелочной функции) следующим образом:
var sortedSquares = function(nums) { let array = nums.map( num => num*num) return array.sort((a,b) => (a-b)) }
Это расположит все числа в правильном порядке. Надеюсь, это будет полезно для вас!
Ресурсы
- Сортировочные массивы JavaScript: MDN Web Docs
- Сортировочные массивы JavaScript: W3school
- JavaScript Array map () Метод: MDN Web Docs
- JavaScript Array map () Метод: W3school