TypeScript 集合類型語法知識點及案例代碼
TypeScript 提供了多種集合類型,用于存儲和管理數據。以下將詳細介紹 數組(Array)、元組(Tuple)、集合(Set) 和 映射(Map),包括其語法、常用操作及案例代碼。
1. 數組(Array)
1.1 創建數組對象
在 TypeScript 中,數組可以通過以下幾種方式創建:
-
使用方括號語法
let fruits: string[] = ['Apple', 'Banana', 'Cherry']; let numbers: number[] = [1, 2, 3, 4, 5];
-
使用泛型語法
let fruits: Array<string> = ['Apple', 'Banana', 'Cherry']; let numbers: Array<number> = [1, 2, 3, 4, 5];
-
使用
Array
構造函數let fruits: string[] = new Array('Apple', 'Banana', 'Cherry'); let numbers: number[] = new Array(1, 2, 3, 4, 5);
1.2 Array 類常用函數和屬性
-
屬性
-
length
: 返回數組的長度。let arr: number[] = [1, 2, 3]; console.log(arr.length); // 輸出: 3
-
-
方法
-
push(item: T)
: 向數組末尾添加一個元素。let arr: number[] = [1, 2, 3]; arr.push(4); console.log(arr); // 輸出: [1, 2, 3, 4]
-
pop()
: 移除并返回數組的最后一個元素。let arr: number[] = [1, 2, 3]; let last = arr.pop(); console.log(last); // 輸出: 3 console.log(arr); // 輸出: [1, 2]
-
shift()
: 移除并返回數組的第一個元素。let arr: number[] = [1, 2, 3]; let first = arr.shift(); console.log(first); // 輸出: 1 console.log(arr); // 輸出: [2, 3]
-
unshift(item: T)
: 向數組開頭添加一個元素。let arr: number[] = [1, 2, 3]; arr.unshift(0); console.log(arr); // 輸出: [0, 1, 2, 3]
-
splice(start: number, deleteCount?: number, ...items: T[])
: 更改數組內容。let arr: number[] = [1, 2, 3, 4, 5]; arr.splice(2, 1, 6); // 從索引2開始,刪除1個元素,插入6 console.log(arr); // 輸出: [1, 2, 6, 4, 5]
-
slice(begin?: number, end?: number)
: 返回數組的一個片段。let arr: number[] = [1, 2, 3, 4, 5]; let sliced = arr.slice(1, 3); console.log(sliced); // 輸出: [2, 3]
-
forEach(callback: (value: T, index: number, array: T[]) => void)
: 對數組的每個元素執行指定的操作。let arr: number[] = [1, 2, 3]; arr.forEach((value, index) => {console.log(`Index ${index}: ${value}`); }); // 輸出: // Index 0: 1 // Index 1: 2 // Index 2: 3
-
map<U>(callback: (value: T, index: number, array: T[]) => U)
: 對數組的每個元素執行指定的操作,并返回一個新數組。let arr: number[] = [1, 2, 3]; let doubled = arr.map(value => value * 2); console.log(doubled); // 輸出: [2, 4, 6]
-
filter(callback: (value: T, index: number, array: T[]) => boolean)
: 過濾數組,返回符合條件的元素組成的新數組。let arr: number[] = [1, 2, 3, 4, 5]; let even = arr.filter(value => value % 2 === 0); console.log(even); // 輸出: [2, 4]
-
2. 元組(Tuple)
2.1 定義元組和賦值
元組是固定長度和固定類型的數組。
// 定義一個包含字符串和數字的元組
let person: [string, number] = ['Alice', 30];// 賦值
person = ['Bob', 25];
2.2 元組常用操作
-
訪問元素
let person: [string, number] = ['Alice', 30]; console.log(person[0]); // 輸出: 'Alice' console.log(person[1]); // 輸出: 30
-
解構賦值
let person: [string, number] = ['Alice', 30]; let [name, age] = person; console.log(name); // 輸出: 'Alice' console.log(age); // 輸出: 30
-
添加元素
let person: [string, number] = ['Alice', 30]; person.push(28); console.log(person); // 輸出: ['Alice', 30, 28]
-
遍歷元組
let person: [string, number] = ['Alice', 30]; person.forEach((value, index) => {console.log(`Index ${index}: ${value}`); }); // 輸出: // Index 0: Alice // Index 1: 30
-
長度屬性
let person: [string, number] = ['Alice', 30]; console.log(person.length); // 輸出: 2
3. 集合(Set)
3.1 創建 Set 對象
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']);
3.2 Set 類常用操作
-
添加元素
let fruits: Set<string> = new Set(['Apple', 'Banana']); fruits.add('Cherry'); console.log(fruits); // 輸出: Set { 'Apple', 'Banana', 'Cherry' }
-
刪除元素
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); fruits.delete('Banana'); console.log(fruits); // 輸出: Set { 'Apple', 'Cherry' }
-
檢查元素是否存在
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); console.log(fruits.has('Apple')); // 輸出: true console.log(fruits.has('Durian')); // 輸出: false
-
清空集合
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); fruits.clear(); console.log(fruits); // 輸出: Set {}
-
遍歷集合
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); fruits.forEach(fruit => {console.log(fruit); }); // 輸出: // Apple // Banana // Cherry
-
獲取集合大小
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); console.log(fruits.size); // 輸出: 3
-
轉換為數組
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); let arr: string[] = Array.from(fruits); console.log(arr); // 輸出: ['Apple', 'Banana', 'Cherry']
4. 映射(Map)
4.1 創建 Map 對象
let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28]
]);
4.2 Map 類的常用函數和屬性
-
屬性
-
size
: 返回映射的大小。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); console.log(personAge.size); // 輸出: 3
-
-
方法
-
set(key: K, value: V)
: 設置鍵值對。let personAge: Map<string, number> = new Map(); personAge.set('Alice', 30); personAge.set('Bob', 25); console.log(personAge); // 輸出: Map { 'Alice' => 30, 'Bob' => 25 }
-
get(key: K)
: 獲取指定鍵的值。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25] ]); console.log(personAge.get('Alice')); // 輸出: 30 console.log(personAge.get('Bob')); // 輸出: 25
-
has(key: K)
: 檢查映射中是否存在指定鍵。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25] ]); console.log(personAge.has('Alice')); // 輸出: true console.log(personAge.has('Charlie')); // 輸出: false
-
delete(key: K)
: 刪除指定鍵及其值。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25] ]); personAge.delete('Bob'); console.log(personAge); // 輸出: Map { 'Alice' => 30 }
-
clear()
: 清空映射。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); personAge.clear(); console.log(personAge); // 輸出: Map {}
-
forEach(callback: (value: V, key: K, map: Map<K, V>) => void)
: 對映射的每個鍵值對執行指定的操作。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); personAge.forEach((age, name) => {console.log(`${name} is ${age} years old.`); }); // 輸出: // Alice is 30 years old. // Bob is 25 years old. // Charlie is 28 years old.
-
keys()
: 返回映射中所有鍵的迭代器。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); let keys = personAge.keys(); console.log(keys); // 輸出: MapIterator { 'Alice', 'Bob', 'Charlie' }
-
values()
: 返回映射中所有值的迭代器。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); let values = personAge.values(); console.log(values); // 輸出: MapIterator { 30, 25, 28 }
-
entries()
: 返回映射中所有鍵值對的迭代器。let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); let entries = personAge.entries(); console.log(entries); // 輸出: MapIterator { ['Alice', 30], ['Bob', 25], ['Charlie', 28] }
-
5. 不同集合類型間的轉換
5.1 數組與 Set 之間的轉換
-
數組轉 Set
let arr: string[] = ['Apple', 'Banana', 'Cherry']; let fruits: Set<string> = new Set(arr); console.log(fruits); // 輸出: Set { 'Apple', 'Banana', 'Cherry' }
-
Set 轉數組
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); let arr: string[] = Array.from(fruits); console.log(arr); // 輸出: ['Apple', 'Banana', 'Cherry']
5.2 數組與 Map 之間的轉換
-
數組轉 Map
let arr: [string, number][] = [['Alice', 30], ['Bob', 25], ['Charlie', 28]]; let personAge: Map<string, number> = new Map(arr); console.log(personAge); // 輸出: Map { 'Alice' => 30, 'Bob' => 25, 'Charlie' => 28 }
-
Map 轉數組
let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); let arr: [string, number][] = Array.from(personAge.entries()); console.log(arr); // 輸出: [['Alice', 30], ['Bob', 25], ['Charlie', 28]]
5.3 Set 與 Map 之間的轉換
-
Set 轉 Map
let fruits: Set<string> = new Set(['Apple', 'Banana', 'Cherry']); let fruitMap: Map<string, number> = new Map(); fruits.forEach(fruit => {fruitMap.set(fruit, 1); }); console.log(fruitMap); // 輸出: Map { 'Apple' => 1, 'Banana' => 1, 'Cherry' => 1 }
-
Map 轉 Set
let personAge: Map<string, number> = new Map([['Alice', 30],['Bob', 25],['Charlie', 28] ]); let keys: Set<string> = new Set(personAge.keys()); let values: Set<number> = new Set(personAge.values()); console.log(keys); // 輸出: Set { 'Alice', 'Bob', 'Charlie' } console.log(values); // 輸出: Set { 30, 25, 28 }
總結
通過以上內容,我們詳細介紹了 TypeScript 中常用的集合類型及其操作方法。掌握這些集合類型及其轉換方法,可以幫助開發者更高效地管理和操作數據。以下是一些關鍵點:
- 數組(Array) 是有序的數據集合,支持多種操作,如
push
,pop
,forEach
,map
,filter
等。 - 元組(Tuple) 是固定長度和固定類型的數組,適用于存儲固定結構的數據。
- 集合(Set) 是不包含重復元素的無序集合,適用于需要唯一性保證的場景。
- 映射(Map) 是鍵值對的集合,適用于需要快速查找和關聯數據的場景。