Задачи по JavaScript
December 17, 2023

Задача с codewars: порядок по убыванию

Ссылка на задачу →

Создайте функцию, которая принимает любое неотрицательное целое число и возвращает число, состоящее из цифр исходного числа в порядке убывания. Другими словами, переставьте цифры так, чтобы получить максимально возможное число.

Примеры

42145 => 54421

145263 => 654321

123456789 => 987654321

Решение

function descendingOrder(n) {
  return Number(String(n).split('').sort((a, b) => b - a).join(''));
}

Объяснение

на примере 42145 => 54421

Чтобы изменять порядок цифр, нам понадобится массив из этих цифр, дальше массив отсортируем как нам нужно и переведем обратно в число. Поехали:

  1. Сначала нужно преобразовать входное число n в строку. Это можно сделать несколькими способами, здесь мы использовали явное приведение к строке через функцию String().
  2. Затем разбиваем строку на массив при помощи метода split(''). Это превращает строку '42145' в массив строк: ['4', '2', '1', '4', '5'].
  3. Сортируем массив в порядке убывания при помощи метода sort(), в который передаем функцию для сравнения (a, b) => b - a. Эта функция сравнивает два числа a и b. Если b больше a, то они меняются местами, получаем отсортированный массив ['5', '4', '4', '2', '1'].
  4. Объединяем элементы массива обратно в одну строку, для этого используем метод join('') с пустой строкой в качестве атрибута, это склеивает без разделителей между элементами массива — получаем строку с цифрами в правильном порядке '54421'.
  5. Преобразуем строку обратно в число при помощи функции Number() и получаем 54421 🎉.

*Еще один способ отсортировать массив — это .sort().reverse().

** Привести значения к нужному типу можно и другими способами, например, получить массив из строки через spread-оператор или привести к числу, используя унарный плюс и т.д.


Telegram-канал: @amake_frontend