當我們有一串含有中文和英文歌名的歌單
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', '告白氣球', '再見王子', '江南', '江南style', '煎熬', '再見只是陌生人', '再說'];
想要讓他按照字母順序排序(中文是按照比劃)
第一個想到的程式碼如下
const sortBands = bands.sort(a > b ? 1 : -1);
如果只是單純的使用sort()
的話會發現中文沒問題
但是英文常常會有The
、a
、an
開頭的歌名干擾
因此需要將之剔除
之後再使用sort()
排序
最後再innerHTML到#bands
function strip(bandName) {
return bandName.replace(/^(a|the|an)\s/i, '').trim();
}
用空值代替所有The
、a
、an
例如第一個'The Plot in You'
會變成' Plot in You'
這時候會發現拿掉The後,還有一個空白
這時使用.trim()
可以拿掉前後空白
就會變成'Plot in You'
來比較
const sortBands = bands.sort((a, b) => strip(a) > strip(b) ? 1 : -1);
document.querySelector('#bands').innerHTML =
sortBands.map(band => `<li>${band}</li>`)
.join('');
最後只要把整理過的歌名排序即可