This is the 17th project of Wes Bos's JS30 series. To see the whole 30 part series, click here Today we learn how to sort HTML elements based based on their text content.
The video can be found here
The codepen for the starter code
The data we have at hand
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'];
We need to insert the sorted data as <li>
elements into
<ul id="bands"></ul>
While sorting the data we need to ignore articles such as the, an, a
.
Steps to take
ul#bands
First we sort normally, with the articles
const sortedBands = bands.sort((a, b) => a > b ? 1 : -1);
//["A Skylit Drive", "An Old Dog", "Anywhere But Here", "Counterparts", "Norma Jean", "Oh, Sleeper", "Pierce the Veil", "Say Anything", "The Bled", "The Devil Wears Prada", "The Midway State", "The Plot in You", "We Came as Romans"]
We'll use a RegEx to find any instance of articles (/i
implies case insensitivity), and reduce them to nothing.
function strip(bandName) {
return bandName.replace(/^(a |the |an )/i, '').trim();
}
const sortedBands = bands.sort((a, b) => strip(a) > strip(b) ? 1 : -1);
Map the list data to a list of strings of "<li>"
's. Then concatenate them and set them to the inner html of the <ul>
document.querySelector('#bands').innerHTML =
sortedBands
.map(band => `<li>${band}</li>`)
.join('');
Finished codepen