CodeAshen's blog CodeAshen's blog
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)

CodeAshen

后端界的小学生
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)
  • CSS3浮动定位与背景样式

  • CSS动画

  • JS基础语法与表达式

  • 流程控制语句与数组

  • JS函数与DOM

  • 面向对象

  • 正则表达式

  • ES6基础入门

  • ES6语法扩展

    • 01-剩余参数与展开运算符
    • 02-Set和Map
      • Set 定义
      • Set 实例的方法和属性
      • Set 构造函数
      • Map 定义
      • Map 实例的方法和属性
      • Map 构造函数
    • 03-迭代器与循环
    • 04-ES6新增方法
  • Promise与Class

  • Module与Babel

  • 前端
  • ES6语法扩展
CodeAshen
2023-02-10
目录

02-Set和Map

# Set

# Set 定义

Set 是一系列无序、没有重复值的数据集合。

const s = new Set();
s.add(1);
s.add(2);
1
2
3

Set 没有下标去标示每一个值,所以 Set 是无序的,也不能像数组那样通过下标去访问 Set 的成员。

Set 通过严格相等 === 来判断是否是重复的元素,除了一个特例 NaN。因为 NaN === NaN 的结果是 false,但是在 Set 中只能只能有一个 NaN。

# Set 实例的方法和属性

方法

const s = new Set();

// 添加
s.add(1);
s.add(2).add(2);

// 包含
console.log(s.has(1)); // true

// 删除
s.delete(1);
s.clear();

// 遍历
// 参数一:回调函数; 参数二:回调函数的this指向
s.forEach(function (value, key, set) {
  // Set 中 value == key
  console.log(value);
  // console.log(this);
}, document);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

属性,就一个 size。

const s = new Set();
s.add(1).add(2).add(2);

console.log(s.size);  // 2
1
2
3
4

# Set 构造函数

前面我们调用构造函数创建 Set 没有传参数,其实 Set 可以接收以下参数:Set、数组、类数组、字符串。

// 数组
const s1 = new Set([1, 2, 1]);

// 字符串
const s2 = new Set('hi');  // Set(2) {"h", "i"}

// arguments
function func() {
  return new Set(arguments);
}
let s3 = func(1, 2, 1);

// NodeList
let s4 = new Set(document.querySelectorAll('p'));

// Set
const s5 = new Set(s1);
console.log(s5 === s1);  // false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# Map

# Map 定义

Map 表示映射,和对象类似,都是键值对的集合。

const m = new Map();
m.set('name', 'alex');
m.set('age', 18);

console.log(m);
1
2
3
4
5

对象用字符串作为键,而 Map 可以使用任何数据类型作为键。另外只有模拟现实世界的实体时,才使用对象。

const m = new Map();
m.set('name', 'alex');
m.set(true, 'true');
m.set({}, 'object');
m.set(new Set([1, 2]), 'set');
m.set(undefined, 'undefined');
1
2
3
4
5
6

Map 判断 Key 是否相同的逻辑和 Set 相同,使用严格等于 ===,特例是 NaN。

# Map 实例的方法和属性

方法

const m = new Map();

// 使用 set 添加的新成员,键如果已经存在,后添加的键值对覆盖已有的
m.set('age', 18).set(true, 'true').set('age', 20);

// get 获取不存在的成员,返回 undefined
const v1 = m.get('true');  // undefined
const v2 = m.get(true);    // 'true'

// has
console.log(m.has('age'));  // true

// delete
m.delete('age');

// clear
m.clear();

// forEach
m.forEach(function (value, key, map) {
  console.log(`${key} => ${value}`);
  // console.log(this);
}, document);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

属性:size

console.log(m.size);
1

# Map 构造函数

Map 构造函数可以接收数组、Set、Map。

// 1.数组
// 只能传二维数组,以体现键值关系
const m1 = new Map([
  ['name', 'alex'],
  ['age', 18]
]);

// 2.Set
// Set 中也必须体现出键和值
const s = new Set([
  ['name', 'alex'],
  ['age', 18]
]);
const m2 = new Map(s);

// 3.Map
const m3 = new Map(m1);
console.log(m3 === m1);  // false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19
01-剩余参数与展开运算符
03-迭代器与循环

← 01-剩余参数与展开运算符 03-迭代器与循环→

最近更新
01
第01章-RabbitMQ导学
02-10
02
第02章-入门RabbitMQ核心概念
02-10
03
第03章-RabbitMQ高级特性
02-10
更多文章>
Theme by Vdoing | Copyright © 2020-2023 CodeAshen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式