当前位置: 首页 > news >正文

Typescript学习教程,从入门到精通,TypeScript 集合类型语法知识点及案例代码(11)

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) 是键值对的集合,适用于需要快速查找和关联数据的场景。
http://www.xdnf.cn/news/609085.html

相关文章:

  • 前缀和数组一文详解
  • Vue3.5 企业级管理系统实战(二十):角色菜单
  • JDK21全景图:关键特性与升级价值
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月23日第86弹
  • 如何轻松擦U盘? (3个解决方案)
  • AI Study,学习计划
  • 2024 CKA模拟系统制作 | Step-By-Step | 3、CKA考试系统的技术设置
  • 基于SpringBoot的网上租赁系统设计与实现
  • YOLOv10 系列算法学习笔记一
  • vue开发中常用方法笔记
  • springboot3+vue3融合项目实战-大事件文章管理系统-登录优化redis
  • Vue3和React中插件化设计思想
  • YOLO11解决方案之速度估算探索
  • LaTeX中所有数字都应该在数学环境中吗?
  • Python项目中的文件夹命名和结构设计建议
  • JavaScript的三大核心组成:ECMAScript、DOM与BOM
  • WebGL开发技巧
  • 一些Dify聊天系统组件流程图架构图
  • Idea如果有参数,怎么debug
  • Grafana XSSOpenRedirectSSRF漏洞复现(CVE-2025-4123)
  • 一键生成专业流程图:Draw.io与AI结合的高效绘图指南
  • 生成式 AI:解锁人类创造力的智能引擎
  • 图解深度学习 - 特征工程(DL和ML的核心差异)
  • JavaScript篇:解密ES6的“藏宝图“:Set和Map的奇妙冒险
  • Don’t Shake the Wheel 论文阅读
  • PycharmFlask 学习心得2:路由
  • 中国软件行业 2024 年度分析报告
  • AI时代的弯道超车之第二十章:哪些工作AI是替代不了的
  • AtCoder Beginner Contest 406(ABCD)
  • 大疆制图跑飞马D2000的正射与三维模型