Set 和 WeakSet 数据结构
Set 和 WeakSet 数据结构是ES6新增。
它与数组非常相似,但是Set数据结构的成员都是唯一的。
特别说明:Set 中只能添加一个NaN
一、Set 数据结构:
var set = new Set([1,2,3,4,2,8,10]) // 两个2
for (var elem of set) {
console.log(elem)
}
//-----------循环用 add 添加赋值 --------------
var set = new Set()
[1,2,3,4,2,8,10].map(function(elem){
set.add(elem)
})
for (let elem of set) {
// for...of 遍历
console.log(elem)
}
//---------------- 扩展运算符 --------------------
var set = new Set ([1,2,3,4,2,8,10]) var arr = [...set] // 扩展运算符(...)内部使用 for...of 循环 console.log(set) // [Object set] console.log(arr) // 1,2,3,4,2,8,10
//---------------- 清空、删除 --------------------
var set = new Set([1,2,3,4,2,8,10]) set.clear() // 清空 set.delete(8) // 删除 var arr = [...set] console.log(arr)
//----------------- 遍历键值 ----------------------
set.forEach(function(value,key){
console.log(value + '=' + key)
})
从输出结果可以看出,键和键值是相同的
//----------------- 判断set中是否含有 -----------
console.log(set.has(8))
//----------------- 遍历值 ------------------------
let setlter = set.values() //把所有的值单独拿出来
for (let val of setlter) {
console.log(val)
}
//------------------ 数量 -------------------------
console.log(set.size)
//------------------- map 和 filter 也可以用于set中--------
es5中数组新增 map 和 filter 方法
map: 映射的意思,映射返回一个新数组,有返回值;mapArr: 返回一个新对象
var mapArr = array.map(function(value,index,array){
return value*value
})
filter: 过滤、筛选的意思,有返回值;filterArr: 返回过滤后新数组
var filterArr = array.filter(function(value,index,array){
if (value > 20) {
return true
}
return false
})
//--------------------------------------------------------
let set = new Set([1,2,3]) set = new Set([...set].map(x => x*2)) var arr = [...set] console.log(arr)
// 返回Set结构: {2,4,6}
let set = new Set([1,2,3,4,5]) set = new Set([...set].filter( x => (x % 2) == 0)) var arr = [...set] console.log(arr)
// 返回Set结构: {2,4}
//------------------ 求并集、交集、差集 ---------------------
使用 Set 可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)
let a = new Set([1,2,3]) let b = new Set([4,3,2])
// 并集
let union = new Set([...a,...b])
var arr = [...union]
console.log(arr) // Set {1,2,3,4}
// 交集
let intersect = [...a].filter(x => b.has(x))
即:let intersect = [...a].filter(function(x){
return b.has(x) // 返回 true,则 x 会被放入 intersect 集合中
})
console.log(intersect) // Set {2,3}
// 差集
let difference = [...a].filter( x => !b.has(x))
即:let difference = [...a].filter(function(x){
return !b.has(x)
})
console.log(difference) // Set {1}
二、WeakSet 数据结构
它与 Set 十分相似,对象的值也不能是重复的,与 Set 不同点:
1.WeakSet 成员只能够是对象
2.作为 WeakSet 成员的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在与WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。
3.使用WeakSet存储对象实例的好处是,由于是对对象实例的引用,不会被计入内存回收机制,所以删除实例的时候,不用考虑weaket,也不会出现内存泄漏。 //-----错误------
var weakset = new WeakSet() weakset.add(5)
//-----正确------
var weakset = new WeakSet()
weakset.add({}) // 添加
var weakset = new WeakSet([[1,2],[3,4]])
//------例子------
var weakset = new WeakSet()
let aObj = {a:'aa'}
let bObj = new String('你好')
let cObj = new Number(8)
weakset.add(aObj)
weakset.add(bObj)
weakset.add(cObj)
//----------- 删除 --------------
weakset.delete(aObj) bObj = null // 把对象删除,weakset中的对象也没了,垃圾回收机制,置空 console.log(weakset.has(bObj)) // weakset不能取值,也不能显示,只用来表示是否有重复的对象
.
Set 和 WeakSet 数据结构的更多相关文章
- Set和WeakSet数据结构
学习Set数据结构,注意这里不是数据类型,而是数据结构.它是ES6中新的东西,并且很有用处.Set的数据结构是以数组的形式构建的. Set的声明 let setArr = new Set(['js', ...
- ES6系列_11之Set和WeakSet数据结构
一.Set 1.Set是什么? Set是ES6 提供的一种新的数据结构.类似于数组. 2.Set能解决什么问题 Set和Array 的区别是Set不允许内部有重复的值,如果有只显示一个,相当于去重. ...
- ES6 WeakSet数据结构 与Set十分相似
它与Set十分相似,对象的值也不能是重复的,与Set不同点: .WeakSet成员只能够是对象. .作为WeakSet成员的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说, ...
- ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...
- ECMAScript 6之Set和Map数据结构
Set 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, ...
- es6学习笔记-set和map数据结构
ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...
- 10.Set 和 Map 数据结构
Set 和 Map 数据结构 Set 和 Map 数据结构 Set 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来 ...
- ES6的新特性(12)——Set 和 Map 数据结构
Set 和 Map 数据结构 Set 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. co ...
- es6的Set和Map数据结构
Set 和 Map 数据结构 Set WeakSet Map WeakMap Set § ⇧ 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set ...
随机推荐
- [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
性质:最小生成树上任意两点间的最大边权,一定是这两点间所有路径的最大边权中最小的.证明显然. #include<cstdio> #include<cstring> #inclu ...
- [BZOJ4869][六省联考2017]相逢是问候(线段树+扩展欧拉定理)
4869: [Shoi2017]相逢是问候 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1313 Solved: 471[Submit][Stat ...
- poj 2342 && hdu 1520 树形dp
题意:有n个人,接下来n行是n个人的价值,再接下来n行给出l,k说的是l的上司是k,这里注意l与k是不能同时出现的 链接:点我 dp[i][1] += dp[j][0], dp[i][0] += ma ...
- [bzoj1016][JSOI2008]最小生成树计数 (Kruskal + Matrix Tree 定理)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- java开发_mysql中获取数据库表描述_源码下载
功能描述: 在mysql数据库中,有两张表: data_element_config , test_table 我们需要获取表:test_table表的描述信息,然后把描述信息插入到表:data_el ...
- MySQL时间戳与日期互转
1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() sel ...
- 树莓派(Debian)系统设置了静态IP之后还会获取动态IP的问题解决(scope global secondary eth0)
解决方法: 1.配置好静态IP在/etc/network/interface 2.关闭dhcp服务(不知道这个服务是干嘛的,明明是客户端还需要这个) sudo systemctl stop dhcpc ...
- (转)Ext.Button点击事件的三种写法
转自:http://maidini.blog.163.com/blog/static/377627042008111061844345/ ExtJs的写法太灵活了,现在收集了关于Button点击事件的 ...
- sqlserver获取所有表和表字段
SELECT [number]=a.colorder, [column] =a.name, [datatype]=b.name, [length]=COLUMNPROPERTY(a.id,a.name ...
- Fiddler2 抓取手机APP数据包
原文:http://blog.goyiyo.com/archives/2044 下载安装运行后,查出运行机器的IP,手机连接同一网域内的WIFI,手机WIFI连接设置里的高级里,代理设置填写上Fidd ...