# 🏅 Day 4 - 陣列與物件 ## TypeScript 物件 以下為使用物件的型別註釋寫法: ```tsx= const person: { name: string; age: number; greet: () => void; } = { name: "John", age: 30, greet: () => { console.log(`Hello, my name is ${person.name}. I'm ${person.age} years old.`); }, }; ``` 上面的程式碼中,我們建立了一個名為 `person` 的物件,它有 `name`、`age` 和 `greet` 三個屬性。 在 `person` 物件中定義了一個 `greet` 方法,通過後面使用點(`.`)運算子,來呼叫這個方法。用於打招呼並輸出名字和年齡。 ## TypeScript 陣列 TypeScript 支援兩種宣告陣列的方式: 1. **使用方括號([])** 例如 **`number[]`** 表示數字型別的陣列。 2. **使用泛型陣列型別(Array<元素型別>)** 泛型提供一種方式來確保陣列中的所有元素都是同一種型別。例如,**`Array<number>`** 也表示數字型別的陣列。 ### **範例程式碼** **範例 1:數字型別陣列** ```tsx= let numbers: number[] = [1, 2, 3, 4, 5]; console.log(numbers.length); // 輸出:5 ``` **範例 2:字串型別的泛型陣列** ```tsx= let fruits: Array<string> = ["蘋果", "香蕉", "櫻桃"]; fruits.push("西瓜"); console.log(fruits); // 輸出:["蘋果", "香蕉", "櫻桃", "西瓜"] ``` ### **單選題** 1. **在 TypeScript 中,以下哪個是正確宣告數字陣列的方式?** - A. **`let numbers = [1, 2, 3];`** - B. **`let numbers: number[] = [1, 2, 3];`** - C. **`let numbers: Array = [1, 2, 3];`** - D. **`let numbers: [number] = [1, 2, 3];`** 2. **以下哪種方法可以用來向 TypeScript 陣列中添加新元素?** - A. **`append()`** - B. **`push()`** - C. **`add()`** - D. **`insert()`** 3. **如何宣告一個包含字串和數字的 TypeScript 陣列?** - A. **`let values: [string, number] = ["Hello", 5];`** - B. **`let values: (string | number)[] = ["Hello", 5];`** - C. **`let values: Array<string, number> = ["Hello", 5];`** - D. **`let values: string & number[] = ["Hello", 5];`** 4. **在 TypeScript 中,`pop()` 方法的用途是什麼?** - A. 刪除陣列的第一個元素。 - B. 刪除陣列的最後一個元素。 - C. 在陣列的開頭添加一個元素。 - D. 在陣列的末尾添加一個元素。 5. **以下哪個是 TypeScript 中宣告多維陣列的正確方式?** - A. **`let matrix: number[][] = [[1, 2], [3, 4]];`** - B. **`let matrix: Array<number> = [[1, 2], [3, 4]];`** - C. **`let matrix: number[] = [[1, 2], [3, 4]];`** - D. **`let matrix: [number, number][] = [[1, 2], [3, 4]];`** ### **實作題** 1. 寫一個 `calculateSum` 函式,該函式接受一個數字陣列作為參數並回傳它們的總和。 2. 定義一個 `TUser` 型別,為一個由物件組成的陣列,物件中的屬性包含:`id` 為數字型別、`name` 為字串型別、`address` 為可選屬性,內容是字串型別或 `null`。創建一個 `user` 陣列帶入任意資料以符合該型別定義。 3. 寫一個 `mergeArrays` 函式, 來合併兩個相同型別的字串陣列,並回傳一個包含兩個陣列所有元素的新陣列。 <!-- 解答: 單選題:B、B、B、B、A 實作題: 1. function calculateSum(numbers: number[]): number { return numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0); } 2. type TUser = { id: number; name: string; address?: string | null | undefined; }[] const user: TUser = [ { id: 1, name: "Tim", address: "XX Rd. XX Street." }, { id: 2, name: "Linda", address: null }, { id: 3, name: "Rick", }, ] 3. function mergeArrays(array1: string[], array2: string[]): string[] { return [...array1, ...array2]; } -->