iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
0

Day17-課題內容

進入JS30的第十七天,今天要將陣列中的資料做排序的動作。[1]

進入JS30-Day17

在草稿中作者已經給了一個陣列內容,我們的目的是忽略開頭的 The 、 An 、 A,將後面的字串做排序:

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'
];

陣列的排序方法 array.sort() ,在先前的章節中有介紹過,因此我們要讓 array.sort() 方法,依照我們想要的字串內容比較,因此我們需要在 比較條件函式先把需要的字串取出來。
作者使用的為正規表達式的方法,如果開頭為 The An 或者 A ,將這些字取代為空字串,並利用 string.trim() 方法將前後的空白字元消除:

function strip(bandName) {
    //從開頭尋找 'a' 'an' 'the' 三個字元並將他們置換為空字串
    return bandName.replace(/^(a |the |an )/i, '').trim();
};

而我們在這邊則是轉成陣列來判斷,透過 string.split() 方法,將字串轉為陣列,並透過判斷第一個元素是否為The An 或者 A ,再使用 array.shift() 方法將不要的第一個元素移除,最後再使用 array.join() 方法將切割後的陣列元素轉為字串。
全部的程式碼如下:

function toNewString (item) {
    //將取得的字串轉為陣列
    let checkArray = item.split(' ');
    //判斷陣列第一個元素是否為`The `、 `An` 或者 `A`
    if (checkArray[0] === 'The' || checkArray[0] === 'An' || checkArray[0] === 'A'){
    //假如是的話,將第一個元素去除
    checkArray.shift();
    //將剩下的元素組合為字串
    let newString = checkArray.join('');
    //回傳最後得到的字串
    return  newString;
    //陣列第一個元素非`The `、 `An` 或者 `A`
  } else {
    //回傳最一開始取得的字串
    return item;
  };
}

bands.sort(function(a, b){
  if( toNewString(a) > toNewString(b) ) {
    return 1;
  } else {
    return -1;
  }
}) 

console.table(bands);

總結

在今天的課題中,我們利用正規表達式或陣列方法,結合 array.sort() 方法將陣列內的資料做整理,而其實還有許多方法可以解決今天字串的判斷,大家可以嘗試找出適合自己的方法!

參考資料

  1. javascript30

上一篇
JS30-Day16-Mouse Move Shadow
下一篇
JS30-Day18-Add Up Times with Reduce
系列文
新手也能懂的JS3030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言