Я пишу это для людей, которые начинают изучать основы сортировки массивов 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))
}

Это расположит все числа в правильном порядке. Надеюсь, это будет полезно для вас!

Ресурсы

  1. Сортировочные массивы JavaScript: MDN Web Docs
  2. Сортировочные массивы JavaScript: W3school
  3. JavaScript Array map () Метод: MDN Web Docs
  4. JavaScript Array map () Метод: W3school