--- tags: JS 直播班 - 2021 春季班 --- # 3/25 線上 Slack 助教 ## 今日輪班助教時間 SONYKO:3/25(四) 早上 9:00 - 早上11:00,下午 1:00 -下午 5:00 ## 發問規範 老師助教同學們好,**這是我的 Codepen**,我**原本預期**「JS 第 8 行會出現數字 8」,**但卻出現**「預期外的結果是 0」,想問下問題出在哪裡? ## 注意 1. 請各位先到 Slack 上將問題放在助教服務內的 thread,如圖 ![](https://i.imgur.com/nHE3sOx.png) 2. 遵循以上的發問規範以便助教查看問題,不可直接貼上網址而沒有說明文字或者只提供截圖 3. 助教會依照 Slack 上的順序回覆問題 4. 以下問題區塊只能由助教自行增加 5. 助教會將回覆寫在下方問題區塊 ## 問題 1. **peter.chen1024:** 助教好,發現程式有BUG,理解不能來求救QQ 目的:保留原始 BMI KATA 資料序列,新增 sortAry 儲存排序後的資料 前情提要:步驟(1)會改動到 originAry 排序,改用步驟(2),不更動 originAry 排序 問題:程式碼第 24 行 `sortAry.forEach((x, index) => x.rank = index + 1);` 預期的結果應該是在 sortAry 裡面新增 rank 屬性儲存名次,但是不知道為何卻也在 originAry 新增相同的 rank 屬性,覺得很奇怪... > 助教回覆: > ~~不怕不怕,助教幫你解惑!!~~ > 🦖 同學先參考[這篇文章](https://hackmd.io/@chupai/B13YRDJJB)。 > 由於 originAry 與 sortAry 的記憶體位置相同, 所以會一直互相修改到。 助教複製同學的 [codePen](https://codepen.io/s_syoujyo/pen/Bapormr?editors=0012) 並將改寫建議都寫在上面囉! 有問題也歡迎再提出唷~ --- 2. **WuJungHan :** 老師助教同學們好,關於第六周主線的[axios資料](https://raw.githubusercontent.com/hexschool/js-training/main/travelApi.json) 用瀏覽器顯示為何少了一層data,想問下問題出在哪?是json view套件省略了外層嗎?但滑鼠移到屬性上,左下角的抓取值也並未出現被省略的那層data,常常會遇到這種問題嗎?麻煩助教解惑~ > 助教回覆: > 這邊建議同學不要看 codepen 的 console , 可以看右鍵 > 檢查的 console 。 拿以下 code 舉例: > ``` > axios.get('https://raw.githubusercontent.com/hexschool/js-training/main/travelApi.json') > .then((res) => { > console.log(res); > }) > ``` > 這邊右鍵 console 的結果是這樣子 : > ![](https://i.imgur.com/M8d18gu.png) > 會發現回傳的物件中有一個 data , 而這個算是 axios 自己的屬性。 也可以理解是他回傳時 **必定會將資料放在這個 data 裡** 。 > 所以不管我們的 json 格式長什麼樣子, 我要取得裡面的內容一定都是取 **res.data** 。 > 不知道有沒有解決同學的疑惑哩~ 有不懂也歡迎再發問唷。 --- 3. **Harvey :** 老師助教同學們好,這是昨天上課的[Codepen](https://codepen.io/lqigzkgx/pen/XWpmqxa?editors=0011),想請問蒐集資料的時候該如何判斷要用物件還是陣列,像25行的let total={};如果改成let total=[],一樣有辦法達成目的嗎? > 助教回覆: > 這邊無法用陣列唷。 因為陣列用 forEach 跑的話,資料有幾筆資料就會新增幾次。 > 如果將這邊的物件改成陣列,會變成 **[['高雄'],['高雄'],['台中'],['台北']]];** 。 > 當然我相信還是有方法可以讓他轉格式...,就變成我們還要去計算誰跟誰有重複,該取得第幾比陣列資料,去將那筆陣列資料改成 ['高雄':1] 。實在是不建議這樣做。 > 至於蒐集資料的時候該如何判斷要用物件還是陣列,這個問題有點廣泛XDD > > 首先可以先想一下什麼方法比較好做,再決定要用什麼資料格式去做。 > 好比說我今天想跑 forEach , 你的資料格式外層就不會是物件。 > 好比說我今天想做一個里長伯資料大全, 那每個里長伯的個人資料, 就不會去用陣列包。 > 舉例: ['name:阿貓' , 'age:81' , 'phone:0999123123'] 這樣超詭異XDD > > 嗚嗚好像越來越離題了,不知道這樣解釋同學有沒有清楚一點。 > 如果不懂助教在說什麼可以再提問哩 QAQ --- 4. **Qizhen,Lin :** 助教好:這是我的Codepen:https://codepen.io/ddnbmhxw/pen/abpOWYg 正在寫第六關作業,我已引入axiom 但寫到第八行後面就不知道該怎麼寫了😭 也不理解該怎麼做 第十二行是原本第五週的code 但不知道中間的部分怎麼寫,不知道問題在哪,謝謝助教😭 > 助教回覆: > 孩子乖, 不要哭 ! > 現在取不到值對不對,這是因為同學將 data 宣告在 axios 的那個大括號裡面。 那包 data 只會一直存在在大個大括號, 所以在外面用 forEach 會報錯(因為找不到資料)。 > 助教覺得最棒棒的寫法是, 將第 13 行的程式碼包成函式, 丟進去 axios 函式裡面。 > 這裡也改寫同學的範例提供參考唷! [點我](https://codepen.io/s_syoujyo/pen/wvgKXRd?editors=0011) > axios 將網址寫成變數的地方我覺得很棒! > 另外助教也建議同學宣告 DOM 和網址可以使用 const 哩。 > 有問題歡迎再提問唷 💜 --- 5. **LiShang :** 問題:if的{}內宣告變數,外面吃不到? 助教好,我做第六關小組作業時,遇到這個語法的問題。 if的{ },是跟function的{ } 是區域環境嗎? let date ="2021/3/17 上午 12:56:57"; if(date.includes("上午")){ let timeStampInMs= true; } console.log(timeStampInMs); > 助教回覆: > 嗨! 同學~ > 這個問題跟 let 比較有關係, 你可以改成 var 會發現取得到值。 > 還記得 let 的 區塊作用域(block scope) 嗎? let 宣告的變數只能在該大括號內取得,出了括號就取不到哩。 > 可以參考[這篇文章](https://ithelp.ithome.com.tw/articles/10185142)複習一下唷! > 有問題歡迎再提問~🦖