JavaScript ES6 全新的Set、Map数据结构

JavaScript ES6 全新的Set、Map数据结构

Map、Set都是ES6新的数据结构, 都是新的内置构造函数, 也就是说typeof的结果, 多了两个:

Set 是不能重复的数组, 但不能[某一项来枚举出来]

Map 是可以任何东西当做键的对象

set()数据结构

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

let s = new Set();
s.add(1);
s.add(2);
s.add(3);
s.add(3);
s.add(3);
s.add(4);
s.add(5);
console.log(s) //Set { 1, 2, 3, 4, 5, 6 }

集合中添加数据用add()方法, 会自动过滤已经有的元素。

最快的数组去重方法, 转化为数组:

let s = new Set([1,2,3,3,3,4,5]);
console.log([...s]) //[ 1, 2, 3, 4, 5 ]
let s = new Set([1,2,3,4,5]);
console.log(s.size) // 5
console.log(s.has(5)) // true
console.log(s.delete(5)) // true
console.log(s) // Set { 1, 2, 3, 4 }

集合的关注点是在元素里面, 而不关注顺序, 所以不提供s[0]来枚举某项API, 但是可以转为数组[...s]

Map()数据结构

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

为了解决这个问题, ES6 提供了 Map 数据结构。它类似于对象, 也是键值对的集合, 但是"键"的范围不限于字符串, 各种类型的值(包括对象)都可以当作键。

也就是说, Object 结构提供了"字符串---值"的对应, Map 结构提供了"值---值"的对应, 是一种更完善的 Hash 结构实现。如果你需要"键值对"的数据结构, Map 比 Object 更合适。

let m = new Map();
const o = {a:1,b:2};
m.set("haha", 123);
m.set(o, 456)
m.set(888,789)
console.log(m)
console.log(m.get(o)) //使用get()方法根据key获取对应的value
console.log(m.size) //获取对应的value数量

使用get()来得到元素的值, key是区分类型的。

遍历数据结构

使用for of 遍历数据结构

let m = new Map();
m.set('a', 100)
m.set('b', 200)
m.set('c', 300)
//遍历key
for(let key of m.keys()){
console.log(key);
}
//遍历value
for(let value of m.values()){
console.log(value);
}

for...of遍历key 和 value

let m = new Map();
m.set('a', 100)
m.set('b', 200)
m.set('c', 300)
for(let [key,value] of m){
console.log(key, value);
}

对象转数组

Array.from()方法用于将两类对象转为真正的数组:类似数组的对象和可遍历的对象(包括 ES6 新增的数据结构 Set 和 Map)。

let m = new Map()
m.set('a', 100)
m.set('b', 200)
m.set('c', 300)
console.log(Array.from(m)) //将m转换为正常的数组
console.log(Array.from(m.keys())) //将m的键名转换为正常的数组
console.log(Array.from(m.values())) //将m的键值转换为正常的数组
相关推荐
吃杠碰小鸡2 分钟前
commitlint校验git提交信息
前端
数据小爬虫@2 分钟前
如何利用java爬虫获得淘宝商品评论
java·开发语言·爬虫
qq_1728055910 分钟前
RUST学习教程-安装教程
开发语言·学习·rust·安装
wjs202417 分钟前
MongoDB 更新集合名
开发语言
monkey_meng21 分钟前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
虾球xz33 分钟前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇38 分钟前
HTML常用表格与标签
前端·html
疯狂的沙粒42 分钟前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
legend_jz1 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
小镇程序员1 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js