set是什么
set 是ES6提供的新的数据结构,他和Array相似,但是set定义的值都具有唯一性,不能重复,可以存储任意类型的值使用set可以求数组的并集.差集.交集等等
- 去重
var mySet = new Set([1, 2, 3, 4, 4]);
mySet为你定义的数组
- 并集(相当于合并数组)
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}
- 交集(求两个数组的共有值)
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
- 差集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}
方法
- mySet.add(12) 添加成员
- mySet.delete(想删除的值)
- mySet.clear() 清除所有成员
- mySet.has(判断是否存在某个值)
- mySet.size 查看属性的长度
数组的遍历
let mySet = new Set([10,20,30,12]);
for (let value of mySet ){
console.log(value)
}
2.
mySet.forEach(function(val){
console.log(val)
})
map
是什么:Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值,和set类似map和Object的区别
- 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
- Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
- Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
- Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
方法:
- map.set(key,value) 添加
- map.get(key) 获取
- map.size() 获取长度
- map.has(key)判断是否存在
- map.clear() 清空
遍历
1.
for(let val of map){ }
2.
map.forEach(function(value,key){
})
3.
for(let item of map.values()){
}
set和map的区别
set是一种关联式容器,以RBTree作为底层容器- 所得元素的只有key没有value,value就是key
- 不允许出现键值重复
- 所有的元素都会被自动排序
- 不能通过迭代器来改变set的值,因为set的值就是键
map和set一样是关联式容器,区别就在于map的值不作为键,键和值是分开的。它的特性如下:
map以RBTree作为底层容器
- 所有元素都是键+值存在
- 不允许键重复
- 所有元素是通过键进行自动排序的
- map的键是不能修改的,但是其键对应的值是可以修改的
这些就是es6的set和map 如果文章对你有帮助的话,记得给小作者点个赞呦