IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Set 和Map数据结构 -> 正文阅读

[数据结构与算法]Set 和Map数据结构

Set 数据结构

Set 数据结构的介绍

在ES6中 提供了 新的数据结构 Set。虽然Set 类似于数组,但是成员的值都是唯一的,没有重复的值。

Set 的用处有很多。eg:Set在数据存储上面是不需要存储重复的关键字的,当用户在某一个页面的搜索框内,可能会重复的搜索相同的关键字;Set使用起来还非常的方便,我们不但可以使用它来存储用户的搜索记录,在它的内部还会自动判断值是否重复,假如该值重复,那么不会进行存储操作。

Set 实例的属性和方法

Set 结构的实例有以下属性。

  • Set.prototype.constructor:构造函数,默认就是Set函数。
  • Set.prototype.size:返回Set实例的成员总数。

Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。

  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。
  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  • Set.prototype.clear():清除所有成员,没有返回值。
遍历操作

Set 结构的实例有四个遍历方法,可以用于遍历成员。

  • Set.prototype.keys():返回键名的遍历器
  • Set.prototype.values():返回键值的遍历器
  • Set.prototype.entries():返回键值对的遍历器
  • Set.prototype.forEach():使用回调函数遍历每个成员

Set的集合

 //简单声明一个set
 let set=new Set();
 //声明一个set的集合
 let set1=new Set([1,2,3
 //输出元素的个数
onsole.log(set1,size);
 //添加上新的元素
 set1.add(7);
 //删除存在的元素
 set1.delete(1);
 // 检测存在的元素
 console.log(set1.has(2)
 // 清空所有的元素
 set1.clear();
 // for of 循环遍历元素
 for(let v of set1){
   console.log(v);
 }

keys()values()entries()

keys方法、values方法、entries方法返回的都是遍历器对象。因为 Set 结构没有键名,只有键值(换一种说法就是键名和键值是同一个值),因此keys方法和values方法的行为是完全一致。

let set = new Set(['one', 'two', 'three']);

for (let item of set.keys()) {
  console.log(item);
}
// one
// two
// three

for (let item of set.values()) {
  console.log(item);
}
// one
// two
// three

for (let item of set.entries()) {
  console.log(item);
}
// ["one", "one"]
// ["two", "two"]
// ["three", "three"]

Set集合实践

  // Set集合实践
let res=[...new Set(arr)];
 // Set交集
let arr1=[6,5,4,3,2,1];
let res=[...new Set(arr)].filter(item=>{
  let s=new Set(arr1);
  if(s.has(item)){
    return true;
  }
  else{
    return false;
  }
});

let res1=[...new Set(arr)].filter(item=>new Set(arr1).has(item));
console.log(res1);
//Set并集
let union=[...new Set(...arr,...arr1)];
console.log(union);

//Set差集
let diff=[...new Set(arr)].filter(item=>!(new Set(arr1).has(item)));
console.log(diff);

Map数据结构

JavaScript 的对象(Object),实质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了非常大的限制。

在ES6 中提供了 Map 数据结构。

它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。(更方便使用,不但字符串可以作为’键‘,其他各种类型的值都可以作为‘键’。)

意思就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。

假如你需要“键值对”的数据结构,Map 比 Object 更合适。(也更实用)

此代码使用了Map结构的set方法。声明Map对象,使用set方法添加上元素,输出元素的数量,可以获取元素,可以直接清空元素,还可以使用for of 来进行遍历操作,非常实用。

  //声明一个 Map对象
  let map=new Map();
  // 添加元素
map.set("小茗同学","饮料");
map.set("change",function(){
  console.log("生而平凡,但不甘平凡");
})
//输出数量size
console.log("map.size");
//删除元素
map.delete("change");
//获取需要的元素
console.log(map.get("change"));
// 清空所有的元素
map.clear();
//for of 遍历元素
for(let v of map){
  console.log(v);
}

Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。

这就解决了同名属性碰撞(clash)的问题,我们扩展别人的库的时候,如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。(可以更好的使用,不会出现同名属性碰撞的问题)

如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键,比如0-0就是一个键,布尔值true和字符串true则是两个不同的键。

另外,undefinednull也是两个不同的键。虽然NaN不严格相等于自身,但 Map 将其视为同一个键。

遍历方法

Map 结构原生提供三个遍历器生成函数和一个遍历方法。

  • Map.prototype.keys():返回键名的遍历器。
  • Map.prototype.values():返回键值的遍历器。
  • Map.prototype.entries():返回所有成员的遍历器。
  • Map.prototype.forEach():遍历 Map 的所有成员。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:21:37  更:2021-08-26 12:22:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:12:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码