---
# System prepended metadata

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

---

---
tags: JS 直播班 - 2021 春季班
---

# 3/31 線上 Slack 助教

## 今日輪班助教時間

至榮：3/31（三）
早上 9:00 - 下午 5:00

## 發問規範

老師助教同學們好，**這是我的 Codepen**，我**原本預期**「JS 第 8 行會出現數字 8」，**但卻出現**「預期外的結果是 0」，想問下問題出在哪裡？

## 注意

1. 請各位先到 Slack 上將問題放在助教服務內的 thread，如圖
 ![](https://i.imgur.com/nHE3sOx.png)
2. 遵循以上的發問規範以便助教查看問題，不可直接貼上網址而沒有說明文字或者只提供截圖
3. 助教會依照 Slack 上的順序回覆問題
4. 以下問題區塊只能由助教自行增加
5. 助教會將回覆寫在下方問題區塊

## 問題

範例. **穎旻：**
老師助教同學們好，這是我的 [Codepen](https://)，我原本預期「JS 第 8 行會出現數字 8」，但卻出現「預期外的結果是 0」，想問下問題出在哪裡？
> 助教回覆：

 
---

（這裡只能由助教自行增加問題，請大家將問題放在 thread 上）

1. **方文文**
    1.想問一下第七關主線任務的LV2，要用axios介接甚麼資料?  看老師上課錄影檔的作業說明，我 預期是要用圓餅圖顯示六張卡片的比例分布 而已。但這裡寫說 要用axios介接資料 ，請問是要摳API嗎?API的連結是甚麼?
    
    2.印象中記得之前好像在六角的教材有看到說， 取節點盡量用querySelector，不要用getElementByXX開頭的方式 去取節點。想請教：
(1) 為什麼?
(2) querySelector可以做到那些getElementByXXX做不到的事，反之，getElementByXXX可以做到那些querySelector做不到的事?
(3) 延續(2)，兩者的優缺點比較

> 助教回覆：
> 1. 三個 Lv 等級都是用 Lv1 的 API 喔，這邊也提供連結給你參考:
> https://raw.githubusercontent.com/hexschool/js-training/main/travelAPI-lv1.json
> 
> 2.(1) 用 querySelector 或是 getElementByXX 都是可以的喔，端看你的開發習慣。
> 
> (2) 兩者大致上功能是一樣的，不過 querySelector 取得的結果是「靜態」的，getElementByXX 取回來的結果是「動態」的。靜態、動態的差異在於取得回來的結果會不會隨著項目的增減 (新增、移除元素) 而自動更新。同學可以參考這篇文章: https://ithelp.ithome.com.tw/articles/10230686?sc=pt
> 
> (3) 可以參考第二點的特性，根據開發用途而做使用。如果沒有特殊需求，兩者都是可以用的。如果同學有興趣，以下連結有針對兩者效能的比較。
> https://www.zhihu.com/question/24702250


2. **Dora**
老師助教同學們好，這是我的 [Codepen](https://codepen.io/ChiaLingShen/pen/ZELBqGN?editors=1011)，
我原本預期JS 第 7 行會讓我按了h2時，console會出現title，但卻只有在按input時，console才會出現view，想問下問題出在哪裡？

> 助教回覆: 這邊因為同學的程式碼第 4 - 6 行有執行一個判斷，如果點擊的目標不是 INPUT 就會中斷函式，因此點擊按鈕以外的區域都是沒有作用的喔。


3. **Morris**
老師助教同學好，這是我的codepen。想問一下為什麼在第六題裡面
原本預期在物件之外再寫上兩個名稱，但buildingName會一直顯示有error的錯誤？
備註：目前是再用一個物件包起來描述六角大別墅及地點
想問有沒有其他解法？ 或者我應該再回頭看一下哪一個部分的知識點短片呢？

> 助教回覆: 第六題目前最外層包的一個陣列，因此不可以使用物件的寫法。同學可以嘗試改成以下結構
```js=
{ 
  title: '六角大別墅',
  position: '高雄市',
  type: [{房屋的物件 1}, {房屋的物件 2}] 
}
```

4. John G 
老師助教同學們好，這是我的 Codepen
https://codepen.io/john-chen-the-flexboxer/pen/RwKoqoq?editors=1011
我原本預期「JS 第 127 行會執行在個人排名上出現姓名，時間與"練習網址"」，
但卻出現「預期外的結果只有在Ming這個人底下才出現"練習網址"，其他人都沒有顯示」，想問下問題出在哪裡？我該如何修正?

> 助教回覆: 首先提醒一下同學，網頁的 HTML 結構一頁只能有一組 h1 喔。
> 同學程式碼第 126-128 行的判斷式有誤，應該修改如下:
> 
```js=
data.forEach((el) => {
 if(item[0] == el.slackName){
    str += `<p>${el.codepenUrl}</p>`
 }
})
```
這樣的撰寫方式才會把 item[0] 拿去跟 data 的每一個元素做比對。

5. **Wira**
助教好，請問，totalObj={   };這個的內容只可以填入console.log(total)後得到的嗎？
可是如果 處理完total資料非常多 還是要複製貼上？如果直接把total放進去也不能用，有沒有什麼方法是可以把total這個資料直接置入到totalObj 而不是複製console.log後的資料呢？

> 助教回覆: 這邊還請同學提供 CodePen，助教比較好示範程式碼給你看喔。如果同學的程式碼出自以下範例: https://codepen.io/hexschool/pen/wvgwoBj?editors=0011， 則 total 與 totalObj 的內容是一樣的，直接使用 total 即可，不需要複製。
> 不過同學也是可以用 JS Es6 的展開運算子將 total 的內容複製到 totalObj 內，如下:
`totalObj = {...total};`
> 可以參考以下連結:
https://www.fooish.com/javascript/ES6/spread-rest-operator.html


6. **Carol Li**

老師助教同學們好，這是我的 [Codepen](https://codepen.io/carolli834/pen/VwPjorm?editors=1010)
想要試著做做看第六周支線任務，但是做到這裡下一步就不知道該怎麼做了，請問可以提點一下嗎?
另外想請問一下3/31每日任務，如果先寫成
```
data.forEach((item, index) => {
  total[item.jsGroup] += 1;
})
```
每個值就會出現null，請問一下這是為什麼? 

> 助教回覆: 
> 首先提醒一下你 JS 第 43 行的 Object.key() 應該改為 Object.keys() 程式才會是正確的喔。
> 
> 目前同學的支線任務已經能夠將所有 data 呈現於畫面，接下來可以思考如何篩選呈現的資料以及做排序。
> 建議同學可以先參考「第六週支線任務提交區」中其他同學的寫法，如果遇到看不懂的程式碼可以再提出問題喔!
> https://hexschool-share.slack.com/archives/G01H6GA03UH/p1616554024484000
> 
> 資料篩選的部分會用到 sort() 函式，同學可以參考以下連結:
> https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
> 
> 關於每日任務的部分，這是因為 total[item.jsGroup] 如果還沒有被定義，是不能做 += 1 的。
```
if(total[item.jsGroup] === undefined) {
    total[item.jsGroup] = 1;
}
```
>這段判斷式的用意就是判斷在 total 中是否存在該 item.jsGroup 屬性，如果不存在 (undefined)，就定義一個，並賦值為 1。
