# 🏅 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];
}
-->