set,weakSet,map,weakMap学习笔记

147 阅读2分钟

参考: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属性