JS30. Задание 17. Sort Bands without Articles


Несложное упражнение на сортировку массива.
Как известно, в английском языке используются артикли. Автор предлагает отсортировать массив без учёта артиклей

function strip(bandName) {
  return bandName.replace(/^(a |the |an )/i, '').trim();
}


Используем регулярное выражение:

arr.replace(/^(a |the |an )/i, "").trim();

Здесь:
arr - массив, который сортируем
.replace - метод для замены одних символов другими
- начало строки, если что, то конец строки это $
(a |the |an ) - ищем один из трёх артиклей.
i - регистронезависимость, переводится как "ignore registr"
"" - то, на что замещаем - пустая строка
.trim(); - метод, удаляющий пробелы в начале и конце строки

Сама сортировка:

const sortedBands = bands.sort((a, b) => strip(a) > strip(b) ? 1 : -1);

Стрелочная функция и тернарный оператор "?" позволили сократить код, который без них выглядел бы как:

const sortedBands = bands.sort(function (a, b) { 
  if(strip(a) > strip(b) {
    return 1
  } else {
    return -1
  }
})


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

Отсортированный массив добавляем в список

document.querySelector('#bands').innerHTML =
  sortedBands
    .map(band => `<li>${band}</li>`)
    .join('');


Код полностью:

const bands = ['The Plot in You', 'The Devil Wears Prada', 'Pierce the Veil', 'Norma Jean', 'The Bled', 'Say Anything', 'The Midway State', 'We Came as Romans', 'Counterparts', 'Oh, Sleeper', 'A Skylit Drive', 'Anywhere But Here', 'An Old Dog'];

function strip(bandName) {
  return bandName.replace(/^(a |the |an )/i, '').trim();
}

const sortedBands = bands.sort((a, b) => strip(a) > strip(b) ? 1 : -1);

document.querySelector('#bands').innerHTML =
  sortedBands
    .map(band => `<li>${band}</li>`)
    .join('');

console.log(sortedBands);