iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
1
Modern Web

寫JS30天系列 第 17

JS 30 -17 -Sort without article

  • 分享至 

  • xImage
  •  

當我們有一串含有中文和英文歌名的歌單

  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()的話會發現中文沒問題
但是英文常常會有Theaan開頭的歌名干擾
因此需要將之剔除
之後再使用sort()排序
最後再innerHTML到#bands

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

用空值代替所有Theaan例如第一個'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('');

最後只要把整理過的歌名排序即可

Demo
完整程式碼


上一篇
JS 30 - 16 - Mouse Move Shadow
下一篇
JS30 - 18 - Adding up time
系列文
寫JS30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言