Клавиша / esc

.toSorted()

Сортирует элементы массива так же, как и метод sort(), но возвращает новый массив.

Время чтения: меньше 5 мин

Кратко

Скопировано

Метод массива toSorted() это копия метода sort(), но, в отличие от него, не мутирует исходный массив, а возвращает новый отсортированный массив. Все undefined элементы сортируются в конец массива.

Пример

Скопировано

Отсортируем массив с числами:

        
          
          const numbers = [43, 6, 35, 1, 9, 7, 5, 75, 16]const sortedNumbers = numbers.toSorted(  (a, b) => a - b)console.log(numbers)// [43, 6, 35, 1, 9, 7, 5, 75, 16]console.log(sortedNumbers)// [1, 5, 6, 7, 9, 16, 35, 43, 75]
          const numbers = [43, 6, 35, 1, 9, 7, 5, 75, 16]
const sortedNumbers = numbers.toSorted(
  (a, b) => a - b
)
console.log(numbers)
// [43, 6, 35, 1, 9, 7, 5, 75, 16]

console.log(sortedNumbers)
// [1, 5, 6, 7, 9, 16, 35, 43, 75]

        
        
          
        
      

Отсортируем массив с именами:

        
          
          const names = [  'Kirill',  'Alex',  'Denis',  'Albert',  undefined,  '',]const sortedNames = names.toSorted()console.log(sortedNames)// ['', 'Albert', 'Alex', 'Denis', 'Kirill', undefined]// undefined элементы будут в конце массива
          const names = [
  'Kirill',
  'Alex',
  'Denis',
  'Albert',
  undefined,
  '',
]
const sortedNames = names.toSorted()

console.log(sortedNames)
// ['', 'Albert', 'Alex', 'Denis', 'Kirill', undefined]
// undefined элементы будут в конце массива

        
        
          
        
      

Как пишется

Скопировано

Array.toSorted, также как и Array.sort, может принимать в качестве аргумента функцию-компаратор: специальную функцию, определяющую порядок сортировки. Это необязательный параметр. Если функция пропущена, элементы массива конвертируются в строки и сортируются в порядке следования символов Unicode.

Как понять

Скопировано

Метод toSorted() имеет те же аргументы и работает также, как метод sort(), но отличается тем, что возвращает новый массив, а не мутирует исходный.

Использование аргумента функции-компаратора позволяет определить порядок сортировки.

Подсказки

Скопировано

💡 Если нет возможности использовать метод toSorted(), можно воспользоваться следующим кодом:

        
          
          const numbers = [  43, 6, 35, 1, 9, 7, 5, 75, 16]// Используем спред-операторconst sortedNumbers = [...numbers].sort(  (a, b) => a - b)console.log(numbers)// [43, 6, 35, 1, 9, 7, 5, 75, 16]console.log(sortedNumbers)// [1, 5, 6, 7, 9, 16, 35, 43, 75]
          const numbers = [
  43, 6, 35, 1, 9, 7, 5, 75, 16
]

// Используем спред-оператор
const sortedNumbers = [...numbers].sort(
  (a, b) => a - b
)
console.log(numbers)
// [43, 6, 35, 1, 9, 7, 5, 75, 16]

console.log(sortedNumbers)
// [1, 5, 6, 7, 9, 16, 35, 43, 75]

        
        
          
        
      

☝️ При сортировке массива методом toSorted() возвращаемый массив будет содержать поверхностную копию (shallow copy) элементов, если эти элементы являются объектами. При изменении этих элементов в объекте, изменения будут видны и в исходном массиве.

        
          
          const obj = {name: 'Scarlett'}const names = [  'Kirill',  'Alex',  obj,  'Denis',  'Albert',  undefined,  '',]const sortedNames = names.toSorted()console.log(sortedNames)// [//  '', 'Albert', 'Alex', 'Denis', 'Kirill',//  { name: 'Scarlett' }, undefined// ]// Меняем объектobj.name = 'Dan'// В отсортированном массиве объект также изменилсяconsole.log(sortedNames)// [//  '', 'Albert', 'Alex', 'Denis', 'Kirill',//  { name: 'Dan' }, undefined// ]
          const obj = {name: 'Scarlett'}

const names = [
  'Kirill',
  'Alex',
  obj,
  'Denis',
  'Albert',
  undefined,
  '',
]
const sortedNames = names.toSorted()

console.log(sortedNames)
// [
//  '', 'Albert', 'Alex', 'Denis', 'Kirill',
//  { name: 'Scarlett' }, undefined
// ]

// Меняем объект
obj.name = 'Dan'

// В отсортированном массиве объект также изменился
console.log(sortedNames)
// [
//  '', 'Albert', 'Alex', 'Denis', 'Kirill',
//  { name: 'Dan' }, undefined
// ]