参考:es6.ruanyifeng.com/#docs/set-m…
Set
含义
它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数。
应用
数组的去重
常用方法
- Set.prototype.constructor:构造函数,默认就是Set函数。
- Set.prototype.size:返回Set实例的成员总数。
- Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
- Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
- Set.prototype.clear():清除所有成员,没有返回值。
WeakSet
WeakSet 对象是一些对象值的集合。且其与 Set 类似,WeakSet 中的每个对象值都只能出现一次。在 WeakSet 的集合中,所有对象都是唯一的。 它和 Set 对象的主要区别有:
- WeakSet 只能是对象的集合,而不能像 Set 那样,可以是任何类型的任意值。
- WeakSet 持弱引用:集合中对象的引用为弱引用。如果没有其他的对 WeakSet 中对象的引用,那么这些对象会被当成垃圾回收掉。
强引用:会影响GC的回收 弱引用:不影响GC的回收
Map
Map对象操作
声明及初始化
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
var m = new Map()
常用方法
1、map.get(key) 获取key值所对应的的value。 获取指定key的元素值value,失败返回null 2、map.has(key)判断是否有key的键值。返回boolean值 3、map.size获取map的元素个数 4、遍历map (1)方法1
arrayObj.forEach(function (item) {
console.log(item.toString());
});
(2)方法2
arrayObj.forEach(function (value, key, map) {
console.log(value)
})
(3)方法3
for (var [key, value] of arrayObj) {
console.log(key + ' = ' + value);
}
5、删除map指定对象
delete map[key]
map.delete(key)
6、map 排序 (1)key排序
var map=new Map();
map.set("b","8");
map.set("c","10");
map.set("a","1");
map.set("d","7");
map.set("e","3");
var arrayObj=Array.from(map);
arrayObj.sort(function(a,b){return a[0].localeCompare(b[0])})
for (var [key, value] of arrayObj) {
console.log(key + ' = ' + value);
}
(2)value排序
var map=new Map();
map.set("b","8");
map.set("c","10");
map.set("a","1");
map.set("d","7");
map.set("e","3");
var arrayObj=Array.from(map);
arrayObj.sort(function(a,b){return a[1]-b[1]})
for (var [key, value] of arrayObj) {
console.log(key + ' = ' + value);
}
WeakMap
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。 与map的不同的地方:
- WeakMap 的 key 只能是 Object 类型。 原始数据类型 是不能作为 key 的(比如 Symbol)。
- WeakMap 持有的是每个键对象的“弱引用”,这意味着在没有其他引用存在时垃圾回收能正确进行。
注:WeakMap没有size属性