es6学习笔记--新数据结构Set,Map以及WeakSet,WeakMap
在javascript中,存储数据的方式大部分就是以数组或者对象形式存储的,es6出现了4种新集合Set,Map,WeakSet,WeakMap来存储数据,简化了编程。
集合--Set
let arr = new Set([1,2,3,4,4,4])
console.log(arr) // Set(4) {1, 2, 3, 4}
console.log(Object.prototype.toString.call( arr)) // [object Set]
let obj = new Set({name:'peter'})
console.log(obj) // Uncaught TypeError: undefined is not a function
let str = new Set('abc')
console.log(str) // Set(3) {"a", "b", "c"}
可以利用Set的特性,可以对数组进行去重。
let arr = new Set([1,2,3,4,5,4,4,4,4])
console.log([...arr]) // [1, 2, 3, 4, 5]
console.log(Array.from(arr)) // [1, 2, 3, 4, 5]
console.log(new Set([1,2,3,4,'4','3'])) // [1, 2, 3, 4, '4', '3']
let set = new Set();
set.add(NaN);
set.add(NaN);
console.log(set) // Set {NaN}
Set属性 -- size
let set = new Set([1,2,3,4])
console.log(set.size) //
Set实例的方法
let a = new Set()
a.add(2)
console.log(a) // Set(1) {2}
a.add(3)
a.add(2)
console.log(a.add(2)) // Set(2) {2, 3}
console.log(a) // Set(2) {2, 3}
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
let a = new Set([1,2,3])
console.log(a.delete(2)) // true
console.log(a.delete(5)) // false
console.log(a) // {1, 3}
has(value):返回一个布尔值,表示该值是否为Set的成员。
let a = new Set([1,2,3])
console.log(a.has(1)) // true
console.log(a.has(4)) // false
clear():清除所有成员,没有返回值。
let a = new Set([1,2,3,4])
console.log(a.clear()) // undefined
a.clear()
console.log(a) // Set(0) {}
关于遍历操作,对象的遍历操作也适用于Set,
let set = new Set(['a', 'b', 'c'])
for( let i of set.keys()) {
console.log(i) // a b c
}
for( let i of set.entries()) {
console.log(i) // ["a", "a"] ["b", "b"] ["c", "c"]
}
集合--WeakSet
和set一样,是个构造函数,用new来创建。和Set不同的是:因为不可遍历,所以没有size属性
const ws = new WeakSet();
console.log(ws) // WeakSet {} let ws = new WeakSet([[1,2,3,4],[5,6]])
console.log(ws) // WeakSet {Array(2), Array(4)}
WeakSet方法:
let ws = new WeakSet();
ws.add({})
console.log(ws) // WeakSet {{…}}
let ws = new WeakSet();
let obj = {}
ws.add(obj)
ws.delete(obj)
console.log(ws) // WeakSet {}
let ws = new WeakSet();
let obj = {}
let obj1 = {}
ws.add(obj)
console.log(ws.has(obj)) // true
console.log(ws.has(obj1)) // false
集合--Map
let map = new Map()
console.log(map) // Map(0) {}
const map = new Map([
['name', 'peter'],
['age', '25']
]);
console.log(map) // Map(2) {"name" => "peter", "age" => "25"}
Map属性:
size 能够返回Map成员的数量
const map = new Map([
['name', 'peter'],
['age', '25']
]);
console.log(map.size) //
Map方法
set(key, value) 设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
let map = new Map();
map.set('name','peter').set('age', 25).set({color:'red'},'key')
console.log(map) // Map(3) {"name" => "peter", "age" => 25, {…} => "key"}
let map = new Map();
map.set('name','peter').set('name', 25).set('name','key')
console.log(map) // Map(1) {"name" => "key"}
let map = new Map();
map.set({name:'peter'}, 1).set({name:'Peter'}, 2)
console.log(map) //Map(2) {{…} => 1, {…} => 2}
get(key) 读取key对应的键值,如果找不到key,返回undefined。
let map = new Map()
map.set('name','peter')
console.log(map.get('name')) // peter
console.log(map.get('age')) // undefined
has(key) 返回一个布尔值,表示某个键是否在当前 Map 对象之中
let map = new Map()
map.set('name','peter')
console.log(map.has('name')) // peter
console.log(map.has('age')) // false
delete(key) 删除某个键,返回true。如果删除失败,返回false
let map = new Map()
map.set('name','peter')
console.log(map) // Map(1) {"name" => "peter"}
console.log(map.delete('name')) // peter
console.log(map.delete('age')) // false
console.log(map) // Map(0) {}
clear() 清除所有成员,没有返回值。
let map = new Map()
map.set('name','peter')
console.log(map) // Map(1) {"name" => "peter"}
console.log(map.clear())
console.log(map) // Map(0) {}
关于遍历操作,对象的遍历操作也适用于Map
集合--WeakMap
方法:
let key1 = {},
key2 = {},
map = new WeakMap([[key1, "Hello"], [key2, 42]]);
console.log(map.has(key1)); // true
console.log(map.get(key1)); // "Hello"
console.log(map.has(key2)); // true
console.log(map.get(key2)); //
console.log(map.delete(key2)) // true
console.log(map) // WeakMap {{…} => "Hello"}
对应的笔记和实例,我放到了GitHub,https://github.com/sqh17/notes
有什么问题请私信或留下评论,一起加油。
es6学习笔记--新数据结构Set,Map以及WeakSet,WeakMap的更多相关文章
- ES6学习笔记(10)----Set和Map数据结构
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ Set和Map数据结构 1.Set 基本用法 Set是一种新的数据结构,它的成员都是唯一 ...
- es6学习笔记8--Map数据结构
Map Map结构的目的和基本用法 JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是只能用字符串当作键.这给它的使用带来了很大的限制. var data = {} ...
- es6学习笔记--新数据类型Symbol
学习了es6语法的symbol类型,整理笔记,闲时复习. Symbol 是es6新增的第七种原始数据类型(null,string,number,undefined,boolean,object),是为 ...
- ES6 学习笔记(十)Map的基本用法
1 基本用法 Map类型是键值对的有序列表,而键和值都可以是任意类型.可以看做Python中的字典(Dictionary)类型. 1.1 创建方法 Map本身是一个构造函数,用来生成Map实例,如: ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- ES6学习笔记<一> let const class extends super
学习参考地址1 学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...
- ES6学习笔记之块级作用域
ES6学习笔记:块级作用域 作用域分类 全局作用域 局部作用域 块级作用域 全局作用域示例 var i=2; for (var i = 0; i < 10; i++) { } console.l ...
- javaSE学习笔记(11)--- Map
javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...
随机推荐
- 我博客上的围棋js程序
作为一个围棋爱好者,就决定在博客里加个围棋js程序.于是,申请了博客的js权限,美化美化我的博客. 好在js的语法像C系的,看了看,写个程序应该还是可以的. 围棋里,设计好基本的数据结构: //a是1 ...
- 区块链 PoW 与 PoS 的纷争
最近在研究区块链,可能会有一些非前端文章,感兴趣的可以关注关注哟. 有关注区块链的,肯定会经常看到这两个名词 -- PoW 与 PoS.但是很多人对他们的含义的理解存在很多偏差.那么他们的含义与区别是 ...
- mac 系统安装 eclipse 方法
经过好几天的折腾,终于在各种不靠谱的经验.说明的忽悠中把自己心爱的 mac 安装上了 eclipse,看到别人的不靠谱,我决定自己写一篇经验,为了大家能够不走我这么多的弯路,也为了自己将来可以回来看看 ...
- 6.2 PowerPC处理器如何处理MSI中断请求
PowerPC处理器使用OpenPIC中断控制器或者MPIC中断控制器,处理外部中断请求.其中MPIC中断控制器基于OpenPIC中断控制器,但是作出了许多增强,目前Freescale新推出的Powe ...
- android DecorView深入理解
开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局.页面都是依附在窗口之上的,而DecorView即是窗口最顶 ...
- Windows PowerShell漫谈-win7下没有超级终端
Windows PowerShell是我在研究win7新特性的时候发现的新工具,起初没有对它产生太大的兴趣,只是简单看看了有关它的介绍.简单使用了一下,感觉上它和cmd.exe没有本质区别.对它产生兴 ...
- mysql数据库相关基本术语和概念
1.DDL:Data Definition Language,即数据定义语言,定义数据库涉及的各种对象,定义数据的完整性约束.保密限制等约束. 2.DML:Data Manipulation Lang ...
- Jlink 烧写Uboot
第一章 Hi3531_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章首次安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100 ...
- Action调用Service
Java Web项目,写到Action的时候,往往会要引入Service,这个是一个常见的操作. 但是,我自认为引入Service需要给它get和set方法,并且这个习惯已经沿用到现在.然而,自从参与 ...
- Excel 2010高级应用-条状图(五)
Excel 2010高级应用-条状图(五) 基本操作如下: 1.新建一个Excel空白文档,并命名条状图 2.单击"插入",找到条状图的样图 3.选择其中一种类型的条状图样图,在空 ...