---
# System prepended metadata

title: "\U0001F3C5 Day 45 - 關鍵字搜尋功能"
tags: [JS 直播班 - 2024 秋季班]

---

# 🏅 Day 45 - 關鍵字搜尋功能

請同學使用 [這個模板](https://codepen.io/hexschool/pen/bGKqbQQ?editors=1011) 進行練習，嘗試實作「關鍵字搜尋」的功能。

教學
---
今天的每日任務並不在課程錄影範圍內，為加碼的知識分享，因此提供小教學讓大家做練習。關鍵字搜尋是蠻實用的技巧，同學可以直接觀看解答再自己練習看看。

### match() 介紹（[參考連結](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/String/match)）：
> 1. match() 函式可以用來做字串的比對，分析關鍵字是否存在於字串當中。
> 2. 它是根據「[正規表達式](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Regular_Expressions)」來進行實作的，有興趣的同學可以上網 Google，這邊就不詳細介紹正規表達式的運作方式。
> 3. 「關鍵字」可以是中 / 英文。如果關鍵字存在，則 match() 會回傳一個包含那個關鍵字的陣列; 如果關鍵字不存在，則 match() 會回傳 null。
> 4. 注意，關鍵字在字串中必須是「連續的」，像是以下範例的 keywordSeparate 就會回傳 null。

範例：
```javascript=
//  想要用來比對的字串
let str = "我是 HexSchool 的大帥哥";
//  以下為 4 種關鍵字
let keywordChinese = "大帥哥"; 
let keywordEnglish = "HexSch";
let keywordNull = "不存在";
let keywordSeparate = "大哥";

console.log(str.match(keywordChinese)); // 回傳 ["大帥哥"]
console.log(str.match(keywordEnglish)); // 回傳 ["HexSch"]
console.log(str.match(keywordNull)); // 回傳 null
console.log(str.match(keywordSeparate)); // 回傳 null
```


### 教學開始（請搭配 [解答](https://codepen.io/hexschool/pen/rNKyBRO?editors=1011) 觀看）
### 步驟一：取得 input 的文字內容，並使用 trim()、toLowerCase() 做字串處理
> 1. .trim() 可以移除字串首尾的空白，避免發生錯誤; 
> 2. .toLowerCase() 可以把英文字母都轉成小寫，建議要比對的字串、關鍵字都做這項處理，這樣不管輸入的關鍵字英文字母大小寫為何，都能找到相符合的產品。

### 步驟二：搭配 filter() 做篩選（JS 第 50 - 53 行）
> 1. 設定「產品的標題」為欲比對的字串。
> 2. 設定 filter() 的 return 條件為「match() 的回傳值」。如果關鍵字存在，則 match() 會回傳一個陣列; 如果關鍵字不存在，則 match() 會回傳 null。
> 3. 在 JS 中，陣列為真值，會被轉換為 true; null 假值，會被轉換為 false ([參考連結](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy))

### 步驟三：進行畫面渲染



## 回報流程

將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  

請記得填入自己的 API 名稱
https://codepen.io/hexschool/pen/rNKyBRO?editors=1011
-->




回報區
---
| #   | Discord | CodePen / 答案 |
| --- | ----- | ----- |
|  01   |   tim    | [CodePen](https://codepen.io/jskrtivy-the-animator/pen/JoPoJWV?editors=1011) | 
| 02 | 毛巾 | [Codepen](https://codepen.io/bqdcjboa-the-solid/pen/qEWEPKy) |
| 03 | Sonia | [Codepen](https://codepen.io/YUJOU/pen/NPKPBNd?editors=1011) |
|  04   |  chris     | [CodePen](https://codepen.io/chris-chen-the-selector/pen/emONJRw?editors=1010) | 
| 05 | GTR150 | [CodePen](https://codepen.io/Wer-Qwe/pen/azoOpBa?editors=1011) | 
|  06   |   Ariel    | [CodePen](https://codepen.io/ariel0510/pen/QwLbpvB?editors=1011) | 
| 07 | yuyuhunter_0509 | [CodePen](https://codepen.io/KRcube/pen/ZYzWBbV?editors=0011) | 
| 08 |mercury2508.| [CodePen](https://codepen.io/Mercury2508/pen/xbxdgyE) | 

<!-- 可複製下方格式
|     |       | [CodePen]() | 
-->