Сортировка строк, смешанных с числами, в JavaScript: подробное руководство

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

Метод 1: использование метода Array.sort() с собственной функцией сравнения

Один из самых простых способов сортировки строк, смешанных с числами, — использование метода Array.sort() со специальной функцией сравнения. Функция сравнения сравнивает два элемента массива и возвращает значение, указывающее их относительный порядок.

function sortAlphanumeric(a, b) {
  const regex = /(\d+)|(\D+)/g;
  const aParts = String(a).match(regex);
  const bParts = String(b).match(regex);
  while (aParts.length && bParts.length) {
    const aPart = aParts.shift();
    const bPart = bParts.shift();
    const isANumber = !isNaN(aPart);
    const isBNumber = !isNaN(bPart);
    if (isANumber && isBNumber) {
      const diff = Number(aPart) - Number(bPart);
      if (diff !== 0) {
        return diff;
      }
    } else if (!isANumber && !isBNumber) {
      if (aPart !== bPart) {
        return aPart.localeCompare(bPart);
      }
    } else {
      return isANumber ? -1 : 1;
    }
  }
  return aParts.length - bParts.length;
}
const array = ['item1', 'item10', 'item2', 'item20', 'item3'];
array.sort(sortAlphanumeric);
console.log(array);

Метод 2: использование метода localeCompare()

Метод localeCompare() сравнивает две строки и возвращает число, указывающее их относительный порядок. Используя этот метод в функции сортировки, мы можем добиться алфавитно-цифровой сортировки.

function alphanumericSort(a, b) {
  return a.localeCompare(b, 'en', { numeric: true });
}
const array = ['item1', 'item10', 'item2', 'item20', 'item3'];
array.sort(alphanumericSort);
console.log(array);

Метод 3. Использование пакета npm естественной сортировки

Пакет npm natural-sort предоставляет удобное решение для естественной сортировки строк, смешанных с числами. Он обрабатывает различные сценарии, включая ведущие нули, отрицательные числа и многое другое.

Чтобы использовать пакет естественной сортировки, сначала установите его с помощью npm:

npm install natural-sort

Затем запросите его в своем файле JavaScript и примените к массиву строк:

const naturalSort = require('natural-sort');
const sorter = naturalSort();
const array = ['item1', 'item10', 'item2', 'item20', 'item3'];
array.sort(sorter);
console.log(array);

Сортировка строк, смешанных с числами, в JavaScript может осуществляться различными методами. В этой статье мы рассмотрели три подхода: использование метода Array.sort() с собственной функцией сравнения, использование метода localeCompare() и использование пакета npm с естественной сортировкой. Каждый метод имеет свои преимущества, и выбор зависит от конкретных требований вашего проекта. Понимая эти методы, вы сможете уверенно выполнять алфавитно-цифровую сортировку в JavaScript.