Introduction & 前言 結束八週切版直播版,接著 六角學院  開了一門關於 JavaScript(下稱JS)  的新課程。
雖然筆者沒有報名參加,但是 六角學院  為了銜接上課程舉辦了為期 60天的 JS 學徒試煉 。
這篇文章將紀錄 60天的練習 ,自己也會出一些新的題目,有興趣的朋友們也可以試著解題,或是在下方留言一起討論。
這篇文章將會記錄第 1 天 - 30 天  的練習。
Summary & 摘要 每天早上校長會出一題關於 JS  的題目,這邊將會記錄下來自己的解題過程,自己也可能會提出新的題目,有解出題目答案或是不了解也可以在下方留言一起討論,如果題目出得不好也請各路大神手下留情。
每日題目 Day1 第一天是關於 JS  宣告的練習。
解題關鍵:由於 var 在創造階段會先被提升到頂部,所以通常有經過宣告的變數在還沒賦值的情況下 console.log 都會拿到 undefined;有興趣了解基本原理可參考 [JavaScript Notes] — 淺談 JavaScript #1 。
 
Day2 第二天六角的題目:
請依照以下房型資訊,去定義各個變數名稱,變數務必要命名比較語意化且好懂。
第二天六角題目解答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var  singleRoom = {    peopleLimit : 1 ,           bedSize : '單人床' ,         bathroomNum : 1 ,           feetSize : 18 ,             sizeType : '平方公尺' ,      description : 'Single Room is only...' ,      checkInTimeFrom : '15:00' ,        checkInTimeTo : '21:00' ,          checkOutTimeFrom : '10:00' ,       checkOutTimeTo : '21:00' ,         feature : {         wifi : true ,                      landlinePhone : true ,             breakfast : true ,                 airConditioning : true ,           miniBar : false ,                  refrigerator : true            },   }    
解題關鍵:變數命名務必好懂為主,且 第一個字元不允許是數字,不允許包含空格和其他標點符號 !另外變數 名區分大小寫,允許包含字母、數字、美元符號($)和下劃線 ,但是通常開頭不會使用 美元符號($)和下劃線 ,第一個字以後也會盡量避免,所以通常推薦使用駝峰命名法 。
 
第二天自己的題目為:
Day3 第三天六角的題目為:
第一題 - 請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 7 8 9 10 11 12 var  a = 1 ;console .log (typeof (a));var  b = "hello" ;console .log (typeof (b));var  c = 1 +"hello" ;console .log (typeof (c));var  d = 1 +"11" ;console .log (d)console .log (typeof (d))
第二題 - 請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 7 var  a;a = a+"hello"  console .log (a);console .log (typeof (a))var  b = 3 ;console .log (b*"hello" );
第三題 - 請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 7 var  a = 9 ;console .log (a+9 );console .log (a+'9' );var  b = "9" ;console .log (b*b)console .log (typeof (b*b))
第二天六角題目解答:
第一題解答
1 2 3 4 5 6 7 8 9 10 11 12 var  a = 1 ;console .log (typeof (a)); var  b = "hello" ;console .log (typeof (b)); var  c = 1 +"hello" ;console .log (typeof (c)); var  d = 1 +"11" ;console .log (d)  console .log (typeof (d)) 
第二題解答
1 2 3 4 5 6 7 var  a;a = a+"hello"  console .log (a); console .log (typeof (a)) var  b = 3 ;console .log (b*"hello" ); 
第三題解答
1 2 3 4 5 6 7 var  a = 9 ;console .log (a+9 ); console .log (a+'9' ); var  b = "9" ;console .log (b*b) console .log (typeof (b*b)) 
解題關鍵:注意型別轉換,通常 數字  及 字串 ,最容易發生轉換後的問題,還有小數點相加等於的問題,有興趣可參考 Kuro Hsu  大大的 重新認識 JavaScript: Day 03 變數與資料型別 。
 
第三天自己的題目為:
請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 7 8 9 var  a = 'a' ;console .log (a*10 );console .log (typeof  a);var  b = 'ba' ;console .log (b+(+a)+a);console .log (typeof  (a*10 ));
解答為:
1 2 3 4 5 6 7 8 9 var  a = 'a' ;console .log (a*10 ); console .log (typeof  a); var  b = 'ba' ;console .log (b+(+a)+a); console .log (typeof  (a*10 )); 
這題上半部應該還算簡單,下半部是之前在某文章看到的有趣題目,console.log 出來會是香蕉😂。
比較陷阱大概是最下面的 console.log(typeof (a*10));,因為 JS  裡 console.log(NaN) 會出現 Number ,如果真的要檢查  NaN  的型別,可以使用 isNaN(),詳細可參考**MDN **。
Day4 第四天六角的題目為:
第一題 - 請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var  a = 1 ;var  b = 1 ;console .log (a>0 );console .log ((a+b)>1 );var  c = 2 ;var  d = 3 ;console .log (c == d);var  e = 4 ;var  f = 5 ;console .log (f >= e);console .log (f != e);console .log (f == e);
第二題(搭配型別自動轉型) - 請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 7 8 9 var  a=1 ; var  b="1" ;console .log (a==1 );console .log (a==b);var  c = 2 ;var  d = "3" ;console .log ((c*d)>=5 );
第三題(嚴謹模式) - 請依序告知以下 console.log 會顯示什麼值。
1 2 3 4 5 6 var  a = 1 ;var  b = "1" ;console .log (a==1 );console .log (a==b);console .log (a===b);console .log (a!==b);
第四天六角題目解答:
第一題解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var  a = 1 ;var  b = 1 ;console .log (a>0 ); console .log ((a+b)>1 ); var  c = 2 ;var  d = 3 ;console .log (c == d); var  e = 4 ;var  f = 5 ;console .log (f >= e); console .log (f != e); console .log (f == e); 
第二題解答
1 2 3 4 5 6 7 8 9 10 var  a=1 ; var  b="1" ;console .log (a==1 ); console .log (a==b); var  c = 2 ;var  d = "3" ;console .log ((c*d)>=5 ); 
第三題解答
1 2 3 4 5 6 var  a = 1 ;var  b = "1" ;console .log (a==1 ); console .log (a==b); console .log (a===b); console .log (a!==b); 
解題關鍵:需要再度注意型別轉換,某些情況下需要先轉型後在做計算,或是轉型後在做比對,而兩個 “=”  和三個是不同的,這是需要特別注意的,另外再複習一下昨日的關鍵,NaN 是 Number,如果真的要檢查需要使用 isNaN(),但通常會了避免出現 NaN 在計算前會先透過 number() 或是 parseInt() 去把字串轉為數字,只是為了保險起見還是需要確保傳進來的值都是 Number 才是最重要的!
 
Day5 第五天六角的題目為:
第一題 - 顧客 Bob 向店員詢價
顧客 Bob:「請問我要買 4 個漢堡,30 份薯條,總共多少?」
1 2 3 4 5 6 7 8 9 10 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  bobTotal;console .log ( "Bob 您好,您詢問的金額總計為" +bobTotal+"元" );
第二題 - 錢包剩下多少錢
mark 錢包裡有 200 元,買了一個漢堡,三個薯條,他還剩下多少錢?
1 2 3 4 5 6 7 8 9 10 11 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  markWallet = 200 ;var  markTotal;console .log ('馬克買完東西後,錢包剩下' +markTotal +'元' )
第三題 - 錢包剩下多少錢
顧客 Mary 身上有 5000 元,想要買 10 份漢堡、10 份薯條,因為他有會員卡,所以可以打九折優惠,請問他還剩下多少錢?
1 2 3 4 5 6 7 8 9 10 11 12 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  sale = 0.9 ;var  maryWallet = 5000 var  maryTotal;console .log ( 'Mary 買完東西後,錢包剩下' + maryTotal +'元' )
第五天六角題目解答:
第一題
1 2 3 bobTotal = (4  * hamburgerPrice) + (30  * friesPrice);  console .log ( "Bob 您好,您詢問的金額總計為 1400 元" );
第二題
1 2 3 markTotal = markWallet - (hamburgerPrice + (3  * friesPrice));  console .log ("馬克買完東西後,錢包剩下 30 元" )
第三題
1 2 3 maryTotal = maryWallet - ((10  * hamburgerPrice) + (10  * friesPrice)) * sale;  console .log ( 'Mary 買完東西後,錢包剩下 4190 元' )
解題關鍵:本日需要注意加減乘除的運算權重,如果同樣權重的但是有區分先後,建議用括號刮起來,如果不確定,可以向本日筆者解題一樣,把需要一起先算的地方,先一起括號起來 !
 
Day6 第六天六角的題目為:
第一題 - 布林與比較運算子練習
成為 VIP 會員的條件,只要購買滿 200 元,就可無條件成為會員,Bob 買了 2 個漢堡,2 個 薯條,是否有滿足條件?
1 2 3 4 5 6 7 8 9 10 var  VIPTotal  = 200 ;var  hamburgerPrice = 50 ;var  friesPrice = 30 ;var  isVIP;console .log ("Bob的 VIP 條件為" +isVIP)
第二題 - 三心二意的老闆希望用邏輯運算子 &&
老闆發現大家都只買薯條衝 VIP 資格,導致大家都不買漢堡,老闆好生氣,他認為他的美味蟹堡是全美最好吃的,小杰也不知道他的自信從哪裡來的。
所以他跟小杰說,從今天起,VIP 條件必須同時符合以下兩點,才能成為 VIP 資格。
一次消費滿 200 元 
一定要買 1 個漢堡 
 
這時又來了兩位顧客,Mary 與 Mark,來看看他們有沒有符合條件吧!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var  VIPTotal  = 200 ;var  hamburgerPrice = 50 ;var  friesprice = 30 ;var  markHamburgerNum = 2 ;var  markfriesNum = 4 ;var  markIsVIP;console .log ("mark的 VIP 條件為" + markIsVIP)var  maryHamburgerNum = 0 ;var  maryfriesNum = 10 ;var  maryIsVIP;console .log ("mary的 VIP 條件為" + maryIsVIP)
第三題 - Mary 很生氣,他覺得現在的 VIP 資格吃人夠夠,希望用 || 邏輯運算子
Mary 說:「老闆我好歹是忠實老客戶欸,我買了你八年的薯條,而且遠遠超過 200 元,竟然還不算我是 VIP,你有沒有搞錯!」
老闆怕了,他很擔心會上台灣的老天鵝娛樂被當作笑柄,所以他立馬將 VIP 條件改成,只要符合以下任一點消費條件,就能成為 VIP 資格。
一次消費滿 200 元 
一定要買 1 個漢堡 
 
我們再看看 Mary 有沒有符合條件吧!
1 2 3 4 5 6 7 8 9 10 11 12 var  VIPTotal  = 200 ;var  hamburgerPrice = 50 ;var  friesPrice = 30 ;var  maryHamburgerNum = 0 ;var  maryfriesNum = 10 ;var  maryIsVIP;console .log ("mary的 VIP 條件為" + maryIsVIP)
第六天六角題目解答:
第一題
1 2 3 isVIP = (( 2  * hamburgerPrice ) + ( 2  * friesprice )) >= 200  ? 'true'  : 'false' ; console .log ("Bob的 VIP 條件為" +isVIP) 
第二題
1 2 3 4 5 6 7 markIsVIP = (( markHamburgerNum * hamburgerPrice ) + ( markfriesNum * friesprice )) >= 200  && markHamburgerNum >= 1  ? 'true'  : 'false' ; console .log ("mark的 VIP 條件為" + markIsVIP) maryIsVIP = (( maryHamburgerNum * hamburgerPrice ) + ( maryfriesNum * friesprice )) >= 200  && markHamburgerNum >= 1  ? 'true'  : 'false' ; console .log ("mary的 VIP 條件為" + maryIsVIP) 
第三題
1 2 3 maryIsVIP = (( maryHamburgerNum * hamburgerPrice ) + ( maryfriesNum * friesPrice )) >= VIPTotal  || markHamburgerNum >= 1  ? 'true'  : 'false' ; console .log ("mary的 VIP 條件為" + maryIsVIP) 
解題關鍵:善用三元運算子可以大幅縮減程式碼,只要記得公式就是 條件 ? 值1(如果前方條件成立) : 值2(如果前方條件不成立),當然也可以一直串接下去,比如 條件1 ? 值1(如果前方條件成立) : 條件2(當前方條件1不成立時觸發) ? 值2(如果前方條件2成立) : 值3(如果前方條件2不成立),用這種方式可以省去很多 if-else,但是在閱讀上可能要花點時間,所以要慎用!(因為本週講義有用到三元運算子,所以有刻意使用,其實後方的判斷都可以不用加上去)
 
Day7 第七天六角的題目為:
第一題 - if 的練習
老闆說現在要來驗收 if 成果,
1 2 3 4 5 var  VIPTotal  = 200 ;var  memberPrice = 350 ;
第二題 - if else 的練習
又有人來申請 VIP 活動了!
這次要記得用 if,以及注意你的語氣啊~ (小杰覺得人生好難
1 2 3 4 5 6 7 var  VIPTotal  = 200 ;var  hamburgerPrice = 50 ;var  friesPrice = 30 ;
第三題 - if、else if、else 練習
工作一整天,小杰累到懷疑人生,累歸累,但還是得吃東西,小杰吃東西有自己的 SOP,來幫幫小杰看看他該吃什麼食物。
小杰都用飢餓度 1~100 來計算,100 就是代表最飢餓,數值皆為整數,不會有小數點 
小杰飢餓度 0~20 時,都吃飯糰 
小杰飢餓度在 21~40 時,都吃肉燥飯+貢丸湯 
小杰飢餓度在 41~60 時,都吃麥當勞 
小杰飢餓度在 61~100 時,都吃 99 元火鍋吃到飽 
今天小杰的飢餓度是 53,請引導小杰去指定地點用餐 
 
1 2 3 4 5 6 7 8 9 10 var  hungryNum = 53 ;if (條件式){  console .log (); }else  if {   console .log (); } 
第七天六角題目解答:
第一題
1 2 3 if (memberPrice >= VIPTotal ) {	console .log ("您好,您有達到 VIP 門檻。這裡給您 VIP 會員卡(遞上" ) } 
第二題
1 2 3 4 5 6 7 8 9 10 11 var  MarkTotal  = (2  * hamburgerPrice) + (2  * friesPrice); var  shortage; if (MarkTotal  >= VIPTotal ) {	console .log ("尊敬的客戶您好,您有達到 VIP 條件" ) } else  {      shortage = VIPTotal  - MarkTotal ;   	 	console .log ("尊敬的客戶您好,您還差 "  + shortage + " 元,才有符合 VIP 條件哦~" ) } 
第三題
1 2 3 4 5 6 7 8 9 if (hungryNum >= 0  && hungryNum <= 20 ) {	console .log ("主人公因為飢餓度在" +hungryNum+",所以他決定去吃 飯糰" ) } else  if  (hungryNum >= 21  && hungryNum <= 40 ) { 	console .log ("主人公因為飢餓度在" +hungryNum+",所以他決定去吃 肉燥飯+貢丸湯" ) } else  if  (hungryNum >= 41  && hungryNum <= 60 ) { 	console .log ("主人公因為飢餓度在" +hungryNum+",所以他決定去吃 麥當勞" ) } else  if  (hungryNum >= 61  && hungryNum <= 100 ) { 	console .log ("主人公因為飢餓度在" +hungryNum+",所以他決定去吃 99 元火鍋吃到飽" ) } 
解題關鍵:本日重點為 if、else、else if…,和昨日一樣,如果善用三元運算子其實可以省很多程式碼,但是有時候精確的寫出整行程式碼,也是算比較保險不容易出錯的方式哦!
 
Day8 第八天六角的題目為:
第一題 - 老闆考考你指派運算子
老闆:「我其實很懷疑你是不是真的會了,我考考你!」
1 2 3 4 5 var  salary = 23500 ;console .log ("小杰目前還剩下" +salary+"元" );
第二題 - if + 指派運算子
老闆:「好了,現在我要告訴你贈品條件!」
目前小杰手上有 3 個贈品 
消費滿 100 元就送對方贈品 
 
而現在來了兩個客人,並依序有消費,請問現在他還剩下多少個贈品?
1 2 3 4 5 6 7 8 var  giftNum = 3 ; var  customerA = 150 ;var  customerB = 99 ; if (客戶A條件){}if (客戶B條件){}console .log ("目前贈品剩下" +giftNum+"個" );
第三題 - if+指派運算子
老闆:「我現在補齊給你總計 50 個贈品!」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var  giftNum = 50 ; var  friesPrice = 30 ; var  hamburgerPrice = 50 ; if (){  console .log ("老聞!贈品還夠!剩下" +giftNum+"個~"  ); } else  {   console .log ("老聞贈品賣光啦~" ) } 
第八天六角題目解答:
第一題
1 2 3 salary = salary - 1000  - 2500 ; console .log ("小杰目前還剩下" +salary+"元" ); 
第二題
1 2 3 4 5 6 7 8 9 if (customerA > 100 ){	giftNum -= 1 ; } if (customerB > 100 ){	giftNum -= 1 ; } console .log ("目前贈品剩下" +giftNum+"個" ); 
第三題
1 2 3 4 5 6 7 8 var  maryTotal = 10  * friesPrice + 10  * hamburgerPrice;if (maryTotal > 50  && giftNum >= 0 ){  giftNum -= maryTotal / 50 ;   console .log ("老聞!贈品還夠!剩下" +giftNum+"個~"  );  } else  {   console .log ("老聞贈品賣光啦~" ) } 
解題關鍵:本日重點為運算子,A = A - B 可縮寫為 A -= B,和三元運算子一樣善用縮寫即可大幅縮寫程式碼。
 
Day9 第九天六角的題目為:
第一題 - 變數型別之呼吸
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var  a = 1 ;a+=1 ; a+=5 ; var  b = 5 ;console .log (a+b);var  c = 3 ;var  d = "hello" ;console .log (c*d);var  e = 8  + 2  * "9" ;console .log (e);var  f = 1 ;var  g = "2" ;var  h = 3 ;console .log (typeof (f+g+h));
第二題 - 運算子之呼吸
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var  total = 200 ;var  isVip = true ;console .log (total>=200  && isVip);var  a = true ;var  b = false ;console .log ( a && b);console .log ( a || b);var  c = 10 ;var  d = 20 ;var  e = 30 ;console .log (c==10  && d>=5  && e !== 20 );console .log (c==10  || d>=5  || e !== 20 );console .log (c==5  || d>=40  || e !== 30 );
第三題 - 運算子之呼吸
請告知以下 console.log,哪些會印出?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 var  maryIsVIP = true ;if (maryIsVIP){ console .log ("哇貴婦餒!" ); }else {  console .log ("你一定搞錯了,叫你們店長出來!" ); } var  momSwim = false ;var  girlfriendSwim = true ;if (momSwim && girlfriendSwim){ console .log ("都不救,因為他們都會游泳" ); }else {     console .log ("小杰大喊:「你們誰不會游泳啊??」" );     if (girlfriendSwim){         console .log ("那你自己游上來!" );     }else {         console .log ("我先問我阿母會不會游泳!" );     }          if (momSwim){         console .log ("媽妳先自己游上來!" );     }else {         console .log ("媽我去救你!" );     } } 
第九天六角題目解答:
第一題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var  a = 1 ;a+=1 ;  a+=5 ;  var  b = 5 ;console .log (a+b); var  c = 3 ;var  d = "hello" ;console .log (c*d); var  e = 8  + 2  * "9" ;console .log (e); var  f = 1 ;var  g = "2" ;var  h = 3 ;console .log (typeof (f+g+h)); 
第二題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var  total = 200 ;var  isVip = true ;console .log (total>=200  && isVip); var  a = true ;var  b = false ;console .log ( a && b); console .log ( a || b); var  c = 10 ;var  d = 20 ;var  e = 30 ;console .log (c==10  && d>=5  && e !== 20 ); console .log (c==10  || d>=5  || e !== 20 ); console .log (c==5  || d>=40  || e !== 30 ); 
第三題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 var  maryIsVIP = true ;if (maryIsVIP){ console .log ("哇貴婦餒!" );  }else {  console .log ("你一定搞錯了,叫你們店長出來!" );  } var  momSwim = false ;var  girlfriendSwim = true ;if (momSwim && girlfriendSwim){ console .log ("都不救,因為他們都會游泳" );  }else {     console .log ("小杰大喊:「你們誰不會游泳啊??」" );      if (girlfriendSwim){         console .log ("那你自己游上來!" );      }else {         console .log ("我先問我阿母會不會游泳!" );      }          if (momSwim){         console .log ("媽妳先自己游上來!" );      }else {         console .log ("媽我去救你!" );      } } 
解題關鍵:關於 true 跟 false 還有 運算子  的複習。
 
Day10 第十天六角的題目為:
第一題 - 客戶詢價函式,來更多個客人也不怕
請改設計一個詢價用的函式,並新增三個參數,依序為客戶姓名、薯條數量,漢堡數量。
1 2 3 4 5 6 7 8 9 10 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  bobTotal;console .log ("Bob 您好,您詢問的金額總計為" +bobTotal+"元" );
第二題 - 好多客戶都在問小杰,他們錢包剩下多少錢,小杰表示無言
下面截圖,請改設計一個查詢客戶錢包餘額用的函式,並新增四個參數,依序為客戶姓名、客戶錢包總額、薯條數量,漢堡數量。
同時來了三個客戶,請執行三次函式回報結果。
1 2 3 4 5 6 7 8 9 10 11 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  markWallet = 200 ;var  markTotal;console .log ('馬克買完東西後,錢包剩下' +markTotal +'元' )
第三題 - 好多人都擁有九折優惠券
這一題,換您來設計函式與參數看看。
突然間同時來了三個客戶,請執行三次函式回報結果。
1 2 3 4 5 6 7 8 9 10 11 12 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  sale = 0.9 ;var  maryWallet = 5000 var  maryTotal;console .log ( 'Mary買完東西後,錢包剩下' + maryTotal +'元' )
第十天六角題目解答:
第一題
1 2 3 4 5 function  countTotal (customerName, hamburgerNum, friesNum ) {  return  `${customerName}  您好,您詢問的金額總計為 ${hamburgerNum * hamburgerPrice + friesNum * friesPrice}  元` ; } console .log (countTotal (Bob , 10 , 5 )); 
第二題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  markWallet = 200 ;var  markTotal; function  deposit (baseMoney ) {	var  base = baseMoney || 0 ;    return  {          spendMoney : function (spendMoney ) {       return  base -= spendMoney;     },          countTotal : function (       return  base;     }   } } var  markDeposit = deposit (markWallet); markTotal = 1  * hamburgerPrice + 2  * friesPrice;  console .log (`馬克買完東西後,錢包剩下 ${markDeposit.spendMoney(markTotal)}  元` );markTotal = 1  * hamburgerPrice;  console .log (`馬克再次買完東西後,錢包剩下 ${markDeposit.spendMoney(markTotal)}  元` );
第三題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 var  hamburgerPrice = 50 ;var  friesPrice = 40 ;var  sale = 0.9 ;var  maryWallet = 5000 ; 		var  bobSpendTotal = 10000 ;  var  xiaojieWallet = 10 ; 	var  maryTotal; 		var  bobTotal; 		var  xiaojieTotal;	function  deposit (baseMoney ) {  var  base = baseMoney || 0 ;    return  {          spendMoney : function (spendMoney ) {       return  base -= spendMoney;     },          countTotal : function (       return  base;     }   } } var  maryDeposit = deposit (maryWallet); 		 var  bobDeposit = deposit (bobSpendTotal); 	 var  xiaojieDeposit = deposit (xiaojieWallet); maryTotal = (1  * hamburgerPrice + 2  * friesPrice) * sale; console .log (`瑪麗買完東西後,錢包剩下 ${maryDeposit.spendMoney(maryTotal)}  元` ); bobTotal = (5  * hamburgerPrice + 20  * friesPrice) * sale; console .log (`bob買完東西後,錢包剩下 ${bobDeposit.spendMoney(bobTotal)}  元` ); xiaojieTotal = 1  * hamburgerPrice * sale; console .log (`小杰買完東西後,錢包剩下 ${xiaojieDeposit.spendMoney(xiaojieTotal)}  元` ); 
解題關鍵:第十天因為要練習 Function ,突然想到之前有練習過 閉包  及 工廠 Function  內的話,跑完 Function  就會釋放記憶體,只會暫存錢包計算後的金額!本次為練習,關於 閉包  及 工廠  還有許多可以改進的地方,還請各路大神手下留情。
 
Day11 第十一天六角的題目為:
第一題 - 老闆想要隨時扣你的薪水
老闆:「今天是發薪日,先發給你薪資 23500 元(遞給小杰」
1 2 3 4 5 var  salary = 23500 ;console .log ("小杰目前還剩下" +salary+"元" );
第二題 - if + 指派運算子
老闆:「好了,現在我要告訴你贈品條件!」
目前小杰手上有 3 個贈品
現在來了三個客人,並依序有消費,A顧客消費 150、B 顧客消費 99、C 顧客消費 110。
1 2 3 4 5 6 7 8 9 10 var  customerA = 150 ; var  customerB = 99 ;  var  customerC = 110 ; if (客戶A條件){}if (客戶B條件){}console .log ("目前贈品剩下" +giftNum+"個" );
第三題 - if+指派運算子
老闆:「我現在補齊給你總計 200 個贈品!」
下為第八關程式碼,giftNum 已改為 200 份,請依照以下邏輯進行改寫:
請用函式改寫,同時來了三組客人,請用你寫的函式連續執行三次,來幫助顧客是否有符合贈品條件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var  giftNum = 200 ;       var  friesPrice = 30 ;     var  hamburgerPrice = 50 ; if (){	console .log ("老閱!贈品還夠!剩下" +giftNum+"個~" ); } else  { 	console .log ("老闖贈品賣光啦~" ) } 
第十一天六角題目解答:
第一題
1 2 3 4 5 6 7 8 9 10 11 12 var  salary = 23500 ;function  payCutHandler (reduceMoney ) {	console .log (`小杰目前還剩下${salary -= reduceMoney} 元` ); } payCutHandler (1000 );payCutHandler (3500 );payCutHandler (500 );
第二題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var  giftNum = 3 ;var  customerA = 150 ; var  customerB = 99 ;  var  customerC = 110 ; function  sendGift (spendMoney ) {  if (spendMoney >= 100  && giftNum > 0 ) {   	console .log (`目前贈品剩下${giftNum -= 1 } 個` );   } else  if  (giftNum <= 0 ) {   	console .log (`目前贈品不夠囉` );   } else  {   	console .log (`您的消費金額不夠!` );   } } sendGift (customerA); sendGift (customerB); sendGift (customerC); 
第三題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var  giftNum = 200 ;       var  friesPrice = 30 ;     var  hamburgerPrice = 50 ; var  sendGiftDoorsill = 50 ; function  sendGift (friesNum, hamburgerNum ) {	var  spendTotal = friesPrice * friesNum + hamburgerPrice * hamburgerNum;   	var  sendGiftNum = Math .floor (spendTotal/sendGiftDoorsill);   	giftNum -= sendGiftNum;   	if (giftNum > 0 ) {     	console .log (`老闆!贈品還夠!剩下${giftNum} 個~` );     } else  {     	console .log (`老闆贈品賣光啦~` );     } } sendGift (10 , 10 ); sendGift (1 ); sendGift (20 , 15 ); 
解題關鍵:今天也是練習 Function  練習應用。
 
Day11-2 第十一天六角直播的額外題目為:
整理 OPENDATA  資料,並且篩選出自己要的陣列,另外筆者也補上了手動輸入後塞選的功能(前端老毛病 ),資料來源為 台中政府資料開放平臺 iBike車站  且項目為下:
列出 iBike  的車站總數
因為 CodePen  不能塞太多 JS  內容,所以資料內容有刪減過
 
列出 iBike  的所有車站名稱
列出關於 公園  相關的所有車站名稱
使用者輸入 input  後可以自動篩選(前端老毛病 )
 
此次練習為整理 JSON  資料,並沒有 API  串接,所以 JSON  是直接複製過來的!
 
第十一天六角直播的額外題目解答:
解題關鍵:善用 array.forEach() 及 include() 還有 innerHTML 等等功能,即可整理成自己想要的陣列,另外推薦一個觀念,盡量不要直接去改變最一開始拿到的資料,把自己需要的篩選出來後放到新的陣列,舊的就維持原本的樣子就好!
 
Day12 第十二天六角的題目為:
HTML  與 CSS  面板都壞掉了,你只能編輯 JS  面板,來去尋找線索
今天只有一題題目,有興趣的朋友可以試試哦!
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <div  class ="key" >   <div  class ="keyItem keyItem1"  >      <img  src ="https://hexschool.github.io/JSTraining/stage12/4.png"  alt ="" >    </div >    <div  class ="keyItem keyItem2" >      <img  src ="https://hexschool.github.io/JSTraining/stage12/2.png"  alt ="" >    </div >    <div  class ="keyItem keyItem3" >         </div >    <div  class ="keyItem keyItem4"  style ="" >         </div >  </div > 
第十二天六角題目解答:
1 2 3 4 5 6 7 8 9 10 document .querySelector ('.keyItem1 img' ).setAttribute ('src' , 'https://hexschool.github.io/JSTraining/stage12/1.png' );document .querySelector ('.keyItem3' ).innerHTML  = '<img src="https://hexschool.github.io/JSTraining/stage12/3.png" alt="3.png" />' ;document .querySelector ('.keyItem4' ).style .backgroundImage  = "url('https://hexschool.github.io/JSTraining/stage12/4.png')" ;
解題關鍵:今天是針對 DOM  的練習操作!
 
Day13 第十三天六角的題目為:
幫助小杰修好體重機!
以下為 BMI 計算方式:
BMI 計算為:體重(公斤) / 身高的平方(單位為公尺) 
 
例如 150 公分 50 kg = 50/(1.5*1.5) = 22.2 BMI 指數 
 
BMI 數值狀態如下 
 
體重過輕:BMI < 18.5 
正常:18.5≦BMI<24 
過重:24≦BMI<27 
輕度肥胖:27≦BMI<30 
中度肥胖:30≦BMI<35 
重度肥胖:BMI≧35 
 
今天只有一題題目,有興趣的朋友可以試試哦!
 
1 2 3 4 5 6 7 8 9 10 function  calculationBMI (height,kg ){  var  bmi = kg/(height/100 *height/100 )   if (bmi>20 ){     return  "過胖!但能吃就是福,維持現況也沒什麼不好的~"    }else {     return  "你很瘦~ㄕㄡˋ~~"    } } console .log (calculationBMI (178 ,70 ));
第十三天六角題目解答:
1 2 3 4 5 6 7 8 9 function  calculationBMI (height,kg ){  var  bmi = kg / (height/100  * height/100 );   return  bmi >= 35  ? '重度肥胖'  : bmi >= 30  ? '中度肥胖'  : bmi >= 27  ? '輕度肥胖'  : bmi >= 24  ? '過重'  : bmi >= 18.5  ? '正常'  : bmi > 0  ? '體重過輕'  : '壞掉啦'  } console .log (calculationBMI (178 ,70 )); console .log (calculationBMI (158 ,40 )); console .log (calculationBMI (160 ,90 )); console .log (calculationBMI (0 ,0 )); 
解題關鍵:三元運算子  雖然有助於幫助縮短程式碼,但也要小心使用!
 
Day 14 第十四天六角的題目為:
再次幫助小杰修好體重機!
以下為 BMI 計算方式:
BMI 計算為:體重(公斤) / 身高的平方(單位為公尺) 
 
例如 150 公分 50 kg = 50/(1.5*1.5) = 22.2 BMI 指數 
 
BMI 數值狀態如下 
 
體重過輕:BMI < 18.5 
正常:18.5≦BMI<24 
過重:24≦BMI<27 
輕度肥胖:27≦BMI<30 
中度肥胖:30≦BMI<35 
重度肥胖:BMI≧35 
 
今天只有一題題目,有興趣的朋友可以試試哦!(這次要做輸入框可以輸入)
 
1 2 3 4 5 6 <input  type ="text"  class ="height input"  id ="js_height_input"  placeholder ="請輸入您的身高(公分)" > <input  type ="text"  class ="kg input"  id ="js_kg_input"  placeholder ="請輸入您的體重(公斤)" > <input  type ="button"  class ="send"  value ="計算"  id ="js_send_btn" > <p  class ="total" > 您的 BMI 指數為   <span  class ="BMI"  id ="js_bmi_span" > -</span > ,   狀態是 <span  class ="status"  id ="js_status_span" > -</span > </p >  
第十四天六角題目解答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 document .querySelector ('#js_send_btn' ).addEventListener ('click' , function (  let  height = parseInt (document .querySelector ('#js_height_input' ).value );   let  kg = parseInt (document .querySelector ('#js_kg_input' ).value );         if (isNaN (height) === true  || isNaN (kg) === true ) {          innerHandler ();     return ;   };      let  bmi = kg / (height/100  * height/100 );   let  result = bmi >= 35  ? '重度肥胖'  : bmi >= 30  ? '中度肥胖'  : bmi >= 27  ? '輕度肥胖'  : bmi >= 24  ? '過重'  : bmi >= 18.5  ? '正常'  : bmi > 0  ? '體重過輕'  : '壞掉啦' ;   console .log (height, kg, bmi, result);      innerHandler (bmi, result); }); let  inputEle = document .querySelectorAll ("input" );inputEle.forEach (function (elem ) {     elem.addEventListener ("keyup" , function (       innerHandler ();     }); }); function  innerHandler (bmi = '-' , result = '-'  ) {  console .log (bmi, result);   document .querySelector ('#js_bmi_span' ).innerHTML  = bmi;   document .querySelector ('#js_status_span' ).innerHTML  = result; } 
解題關鍵:練習監聽事件,另外要替多個物件加上監聽必須先使用 querySelectorAll  選好 DOM  後再跑 forEach  一個一個加上去。
 
Day15 第十五天六角的題目為:
改寫 Code ,但這次 HTML 面板壞掉了,你唯一可以改的面板只有 CSS 與 JS 面板。
1 2 3 4 5 6 .blue {  color : blue; } .orange {  color : orange; } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 var  height = document .querySelector ('.height' );var  kg = document .querySelector ('.kg' );var  send = document .querySelector ('.send' );var  bmiDOM = document .querySelector ('.BMI' );var  statusDOM = document .querySelector ('.status' );var  BMIData  = {    "overThin" :{         class :"blue" ,         statusText :"體重過輕"      },     "normal" :{         class :"orange" ,         statusText : "正常"      } } function  calculationBMI (    var  thisHeight = parseInt (height.value );     var  thisKg = parseInt (kg.value );     var  bmi = thisKg / (thisHeight / 100  * thisHeight / 100 )     if  (bmi > 20 ) {         render ("normal" ,bmi)     } else  {         render ("overThin" ,bmi);     } } function  render (status,bmiText ){    bmiDOM.textContent  = bmiText;     statusDOM.textContent  = BMIData [status].statusText ;     statusDOM.classList .add (BMIData [status].class ); } send.addEventListener ("click" ,function (     calculationBMI (); }) 
第十五天六角題目解答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 .blue {  color : blue; } .green  {  color : green; } .pink  {  color : pink; } .orange {  color : orange; } .purple  {  color : purple; } .red  {  color : red; } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 var  height = document .querySelector ('.height' );var  kg = document .querySelector ('.kg' );var  send = document .querySelector ('.send' );var  bmiDOM = document .querySelector ('.BMI' );var  statusDOM = document .querySelector ('.status' );var  BMIData  = {  'overThin' :{     text :"體重過輕" ,     class :"blue" ,   },   'normal' :{     text :"正常" ,     class :"green" ,   },   'overweight' :{     text :"過重" ,     class :"pink" ,   },   'mildObesity' :{     text :"輕度肥胖" ,     class :"orange" ,   },   'moderateObesity' :{     text :"中度肥胖" ,     class :"purple" ,   },   'severeObesity' :{     text :"重度肥胖" ,     class :"red" ,   },   'broken' :{     text :"壞掉了" ,     class :"black" ,   } } var  inputEle = document .querySelectorAll ("input" );inputEle.forEach (function (elem ) {     elem.addEventListener ("keyup" , function (              render ();     }); }); function  calculationBMI (    let  thisHeight = parseInt (height.value );     let  thisKg = parseInt (kg.value );             if (isNaN (thisHeight) === true  || isNaN (thisKg) === true ) {              alert ('請輸入數字' );       render ();       return ;     };        let  bmi = thisKg / (thisHeight / 100  * thisHeight / 100 );        if (bmi === Infinity ) {              alert ('請避免輸入結果為無窮大的數值' );       render ();       return ;     }        bmi >= 35  ? render (bmi, 'severeObesity' ) : bmi >= 30  ? render (bmi, 'moderateObesity' ) : bmi >= 27  ? render (bmi, 'mildObesity' ) : bmi >= 24  ? render (bmi, 'overweight' ) : bmi >= 18.5  ? render (bmi, 'normal' ) : bmi > 0  ? render (bmi, 'overThin' ) : render (0 , 'broken' );      } function  render (bmiText = '-' , status = '-'  ){    bmiDOM.textContent  = bmiText;     statusDOM.innerHTML  = BMIData [status] !== undefined  ? BMIData [status].text  : '-' ;     BMIData [status] !== undefined  ? statusDOM.classList  = `status ${BMIData[status].class } `  : statusDOM.classList  = 'status' ; } send.addEventListener ("click" ,function (     calculationBMI (); }) 
解題關鍵:今天的練習重點為 關注點分離 !
 
Day16 第十六天六角的題目為:
練習 forEach  塞入字串至 HTML ,之後將整合前幾天練習。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 var  list = document .querySelector (".list" )var  data = [];data.push (   {     "name" :"廖洧杰" ,     "height" :178    } ) data.push (   {     "name" :"小乖" ,     "height" :120    } ) data.push (   {     "name" :"小麗" ,     "height" :140    } ) data.push (   {     "name" :"小新" ,     "height" :80    } ) data.push (   {     "name" :"小華" ,     "height" :50    } ) data.forEach (function (item ){   var  str = "" ;   var  content = '<li>' +item.name +"你的身高是" +item.height +'</li>'    str+=content;   list.innerHTML  = str; }) 
第十六天六角的解答為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 var  list = document .querySelector (".list" )var  data = [];data.push (   {     "name" :"廖洧杰" ,     "height" :178 ,     "kg" : 70 ,     "bmi" : 22 ,     "status" : '正常'    } ) data.push (   {     "name" :"小乖" ,     "height" :120 ,     "kg" : 15 ,     "bmi" : 10 ,     "status" : '體重過輕'    } ) data.push (   {     "name" :"小麗" ,     "height" :140 ,     "kg" : 60 ,     "bmi" : 31 ,     "status" : '中度肥胖'    } ) data.push (   {     "name" :"小新" ,     "height" :80 ,     "kg" : 80 ,     "bmi" : 125 ,     "status" : '重度肥胖'    } ) data.push (   {     "name" :"小華" ,     "height" :50 ,     "kg" : 1 ,     "bmi" : 4 ,     "status" : '體重過輕'    } ) var  str = "" ;data.forEach (function (item ){   let  content = `<li>${item.name} 的身高為 ${item.height}  公分,體重是 ${item.kg}  公斤,BMI 數據為 ${item.bmi} ,狀態為${item.status} <li>`    str += content;   list.innerHTML  = str; }); 
解題關鍵:今天的練習重點為 forEach  及 字串模板 !
 
Day16-2 第十六天六角直播的額外題目為:
使用 AXIOS  取得資料,並且整理近畫面,這次使用上次 Day11-2  的練習做更改,把資料來源改為使用 AXIOS  取得。
第十一天六角直播的額外題目解答:
現在打 API  使用 AXIOS  真的方便許多,但是最近在工作上使用必須去多做一層中介層,再打 API  的同時就必須要先檢查 Token ,這時候就會知道自己對 AJAX  其實不熟練,這邊會再精進學習!
Day17 第十七天六角的題目為:
請查看下列程式碼後思考並回覆:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 var  list = document .querySelector (".list" )var  data = [];data.push (   {     "name" :"廖消杰" ,     "height" :178    } ) data.push (   {     "name" :"小乖" ,     "height" :120    } ) data.push (   {     "name" :"小麗" ,     "height" :140    } ) data.push (   {     "name" :"小新" ,     "height" :80    } ) data.push (   {     "name" :"小華" ,     "height" :50    } ) data.forEach (function (item ){   var  str = "" ;   var  content = '<li>' +item.name +"你的身高是" +item.height +'</li>'    str += content;   list.innerHTML  = str; }) 
str 放 forEach 外頭跟裡面的差異 
innerHTML 放 forEach 外頭跟裡面的差異 
innerHTML 當要寫內容進去時,會不會將裡面內容給覆蓋掉? 
 
第十七天六角的題目解答為:
如果放外頭不會每次都清掉,因為我們的目的是為了把字串暫時放在 str  這個變數,然後印到 HTML  上,如果放外面,會一直累加上去,這不是我們要的。 
forEach  會去跑一個 Array  迴圈,如果把 innerHTML  放外面只會跑一次,放回圈內才會在遍歷迴圈時每次都跑到。會!如果不想要覆蓋就要使用 append 。 
 
Day18 第十八天六角的題目為:
挑戰者們不要忘了,JS 始終要搭配妳寫好的 CSS 來進行渲染,護理師好像已經看膩了小杰爛到不行的陽春版本,寫了一個 .list2 版本,請依照他的 CSS 樣式邏輯,將 data 陣列裡面的資料,依序渲染到 .list2 裡面的 li 來顯示。
1 2 3 4 5 6 7 8 9 10 11 12 <ul  class ="list" > </ul > <ul  class ="list2" >   <li  class ="list-card" >      <h2 > 小華</h2 >      <p > 你的身高是178</p >    </li >     <li  class ="list-card" >      <h2 > 小美</h2 >      <p > 你的身高是133</p >    </li >  </ul > 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .list2 {  list-style :none;   margin : 0 ;   padding : 0 ; } .list-card {  background : blue;   width : 300px ;   margin : 0  auto;   color : #fff ;   text-align : center;   padding : 10px ;   margin-bottom : 30px ; } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 var  list = document .querySelector (".list" )var  data = [];data.push (   {     "name" :"廖洧杰" ,     "height" :178    } ) data.push (   {     "name" :"小乖" ,     "height" :120    } ) data.push (   {     "name" :"小麗" ,     "height" :140    } ) data.push (   {     "name" :"小新" ,     "height" :80    } ) data.push (   {     "name" :"小華" ,     "height" :50    } )   var  str = "" ; data.forEach (function (item ){   var  content = '<li>' +item.name +"你的身高是" +item.height +'</li>'    str+=content;   })  list.innerHTML  = str; 
第十八天六角的題目解答為:
解題關鍵:今天的練習重點為 字串模板  及變數應該放 function  外面還是裡面,這必須考量到你的變數是要每次在使用前都要回覆最初樣貌,還是要拿來累加上去。
 
Day19 第十九天六角的題目為:
參考同學的程式碼 並解釋下列三個問題。
arrayBMIrecord 的陣列用途是什麼? 
請描述 calculateBMI 函式做了什麼事情 
請描述 render 函式做了什麼事情 
 
第十九天六角的題目解答為:
arrayBMIrecord 的陣列用途是什麼? 
請描述 calculateBMI 函式做了什麼事情 
請描述 render 函式做了什麼事情 
 
解題關鍵:今日為複習。
 
Day20 第二十天六角的題目為:
試著練習把之前的 計算  及 樣式  及 字串模板插入 …等等 整合練習。
第二十天六角的題目解答為:
解題關鍵:今天算是總複習。
 
Day21 第二十一天六角的題目為:
將所有紀錄的 BMI  計算出平均值並且 Render  到畫面上。
第二十一天六角的題目解答為:
解題關鍵:今日練習了平均值的計算 Array.prototype.reduce(),這個用法會將陣列所有數字將起來,詳情可見 MDN 。
 
Day22 第二十二天六角的題目為:
紀錄渲染到畫面上為上到下,因為原本的題目是把紀錄存到一個變數陣列裡,然後透過 innerHTML 渲染到畫面上,但因為自己做法不同,所以這邊其實只動了一個地方。
第二十二天六角的題目解答為:
原本的做法需要先把陣列透過 reverse() 或是 unshift() 去反轉陣列,然後在渲染到畫面上。因為我原本的做法是直接把文字渲染到畫面上,並無需再透過陣列去存放,所以只改了 record_dom.insertAdjacentHTML('beforeend', html); 這段,把 beforeend 改為 afterbegin 前為 在 element 裡面,最後一個子元素之後  後者為 在 element 裡面,第一個子元素之前 。
解題關鍵:關於原本的 reverse() 及 unshift(),雖然都是反轉,但其實在大資料處理上效能相差甚多,在網路上不乏可見許多人相比的文章,比如 Array的push與unshift方法效能比較分析Script 。大概的概念就是,前者是 元素放進去後再一次反轉 ,後者為 元素放進第一個後,每一個元素一個一個往後移動 ,在大多數的比較下,兩者的秒數相差都有十幾倍以上 ,所以這邊選擇使用 push() 後再 reverse()
 
Day23 第二十三天六角的題目為:
須將變數 title 的值塞入陣列 monthMoney 第一個位置。
1 2 var  monthMoney = [ 500000 , 1300000 ,2000000 ];var  title = '總公司每月討債業績' ;
第二十三天六角的題目解答為:
解題關鍵:因為本次不需要反轉陣列,所以不需要用到 reverse(),只需要使用 unshiift(),這個用法類似於 push(),只是是將數值塞入順序第一位。
 
Day24 第二十四天六角的題目為:
使用 forEach() 將 newMonthMoney  陣列的值依序放到 monthMoney  的後方。 
第二十四天六角的題目解答為:
解題關鍵:使用 forEach() 可以依序對陣列內的值進行操作!
 
Day25 第二十五天六角的題目為:
將陣列 serverData  內的物件重新排列,需要改為 data = [["總公司每月討債業務",500000, 1300000,2000000,300000,500000],["黑道大哥業績",30000,100000,300000,50000,100000]]。
1 2 3 4 5 6 7 8 9 10 11 12 13 var  serverData = [  {     "name" :"總公司每月討債業務" ,     "seasonOneData" :[500000 , 1300000 ],     "seasonTwoData" :[2000000 ,300000 ,500000 ]   },{     "name" :"黑道大哥業績" ,     "seasonOneData" :[30000 ,100000 ],     "seasonTwoData" :[300000 ,50000 ,100000 ]   } ] var  data=[];
第二十五天六角的題目解答為:
解題關鍵:又到了快樂星期五,今天用了一直很想嘗試的解構,看來要再多練習呢!
 
Day26 第二十六天六角的題目為:
練習 AJAX  取得資料並渲染到畫面上。
第二十六天六角的題目解答為:
解題關鍵:之後題目又會回到 AJAX  了,今日為複習。
 
Day27 第二十七天六角的題目為:
參考下列三個網站學習不熟或沒用過的寫法。
第二十七天六角的題目解答為:
這邊自己挑了兩個沒用過的用法來學習,分別是 copyWithin() 及 Array.from(),前者可將陣列內指定的位置替換掉,並且複製內列內指定的區間值覆蓋上去,舉例來說有個陣列為 [1, 2, 3, 4, 5] 用前者方法可以將陣列內容的 4, 5  替換為 1, 2 ;後者為 Array.forEach() 的 Object 版本。
解題關鍵:在資料處理中就是 JavaScript  的精華了,如果能更熟悉一些用法,可以避免掉很多多餘的程式碼。
 
Day28 第二十八天六角的題目為:
取得 API  後在使用 sort() 去排序。
第二十八天六角的題目解答為:
解題關鍵:取得資料後使用 sort() 排序可從小排到大或是從大排到小。
 
Day29 第二十九天六角的題目為:
繼昨天的串接 API  之後排序,今日需要加上 Select  並且按造使用者選擇的選項去排序,HTML  範例為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <select >  <option  value ="id" > 依照 id 編號排序(由1開始從上往下)</option >   <option  value ="process" > 依照完課率排序(由最高到最低)</option >  </select > // 以下為編號排序範例 <ul  class ="list" >  <li > 編號 ID 1 為廖洧杰,他的完成進度為 5 %</li >   <li > 編號 ID 2 為王小明,他的完成進度為 33 %</li >  </ul > // 以下為完課率排序範例 <ul  class ="list" >  <li > 編號 ID 2 為王小明,他的完成進度為 33 %</li >   <li > 編號 ID 1 為廖洧杰,他的完成進度為 5 %</li >  </ul > 
第二十九天六角的題目解答為:
解題關鍵:使用監聽事件 DOM.addEventListener() 後傳值進 render() 的 function ,這邊傳送 Select  底下 Option  的 Value ,這樣可以直接在 render 的時候直接去對到列內的 key ,所以之後有新增想排序的選項,可以在 option  那邊先把 value  定義好。
 
Day30 第三十天六角的題目為:
依照昨天的 API  取的列表後,經過 sort() 之後的陣列必需轉為圖表。
第三十天六角的題目解答為:
這次會用到 c3.js d3.js  但也僅止於用 excel  的地方。
在開始我們必須引入 CSS  及 JS :
1 2 <link  href ="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.18/c3.css" > <script  src ="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.18/c3.min.js" > </script > 
完成後的起手勢跟 canvas  很像,必須先在 html  上選擇你要放表的地方:
接著按照最基本的 c3 line 
1 2 3 4 5 6 7 8 var  chart = c3.generate ({    data : {         columns : [             ['data1' , 30 , 200 , 100 , 400 , 150 , 250 ],             ['data2' , 50 , 20 , 10 , 40 , 15 , 25 ]         ]     } }); 
接著就能看見圖表了,但你可能還會想配置一些額外的設定,比方說 X 及 Y 軸的文字 、顏色 、圖表樣式 …等等。
Axis(軸) 關於配製方法幾乎都是在 c3.generate 裡面 data 的下方一個一個補上去,像是現在要舉例的 Axis(軸) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 var  chart = c3.generate ({    data : {         columns : [             ['data1' , 30 , 200 , 100 , 400 , 150 , 250 , 50 , 100 , 250 ]                      ]     },     axis : {         x : {             type : 'category' ,             categories : ['小杰' , '老闆' , '黑道大哥' , '護理師' , '禿頭俠' , '路人甲' , '路人乙' , '路人丙' , '你' ],             label : {               text : '參賽者姓名' ,               position : "outer-center"                                                                                                        },         },         y : {             label : {                 text : '完課率(%)' ,                 position : 'outer-middle'                                                                                                                    }         },     } }); 
相關配置其實都還是可以在官方指南找到,這邊就淺入淺出吧!
 
解題關鍵:其實套件使用還是要看當初作者怎麼訂製,然後使用,主要需要注意的地方還是在資料處理部分,該怎麼塞,怎麼重複使用同一個 function  不寫多餘的 Code ,這才是最重要的地方,有關圖表更多介紹可以參考這位大神的部落格 提姆寫程式(TimCodingBlog) - JS 筆記 - C3.js 基本認識 。
 
Conclusion & 結論 目前會每天依序的練習,如果有解開題目答案或是不了解也可以在下方留言呦!如果題目出得不好也請各路大神手下留情。