---
# System prepended metadata

title: 3/25 線上 Slack 助教
tags: [JS 直播班 - 2021 春季班]

---

---
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 跑的話，資料有幾筆資料就會新增幾次。
> 如果將這邊的物件改成陣列，會變成 **[['高雄'],['高雄'],['台中'],['台北']]];** 。
> 當然我相信還是有方法可以讓他轉格式...，就變成我們還要去計算誰跟誰有重複，該取得第幾比陣列資料，去將那筆陣列資料改成 ['高雄':１] 。實在是不建議這樣做。
> 至於蒐集資料的時候該如何判斷要用物件還是陣列,這個問題有點廣泛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)複習一下唷！
> 有問題歡迎再提問～🦖