Set 和 Map 數據結構


Set 和 Map 數據結構

Set

// 可以通過數組創建一個set(具有 iterable 接口的其他數據結構都行)
let set = new Set([1,2,3,2]);
// 通過set.size獲取Set的大小
console.log(set.size);
//Set.prototype.add(value):添加某個值,返回 Set 結構本身。
set.add(4);
// Set.prototype.delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。
set.delete(1);
//Set.prototype.has(value):返回一個布爾值,表示該值是否爲Set的成員。
set.has(2);
//Set.prototype.clear():清除所有成員,沒有返回值。
set.clear();

//Set.prototype.keys():返回鍵名的遍歷器
//Set.prototype.values():返回鍵值的遍歷器
//Set.prototype.entries():返回鍵值對的遍歷器
//Set.prototype.forEach():使用回調函數遍歷每個成員
let set = new Set(['red', 'green', 'blue']);

for (let item of set.keys()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.values()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.entries()) {
  console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]

WeakSet

它與 Set 有兩個區別。

  • 首先,WeakSet 的成員只能是對象,而不能是其他類型的值。
  • WeakSet 中的對象都是弱引用,即垃圾回收機制不考慮 WeakSet 對該對象的引用,也就是說,如果其他對象都不再引用該對象,那麼垃圾回收機制會自動回收該對象所佔用的內存,不考慮該對象還存在於 WeakSet 之中。

Map

JavaScript 的對象(Object),本質上是鍵值對的集合(Hash 結構),但是傳統上只能用字符串當作鍵。這給它的使用帶來了很大的限制。

const m = new Map();
const o = {p: 'Hello World'};

// set方法設置元素
m.set(o, 'content')
// 獲取key爲o的value
m.get(o) // "content"
// has判斷是否存在某個元素與map中
m.has(o) // true
// 刪除key爲o的某個元素
m.delete(o) // true
m.has(o) // false

WeakMap

WeakMap與Map的區別有兩點。

  • WeakMap只接受對象作爲鍵名(null除外),不接受其他類型的值作爲鍵名。
  • WeakMap的鍵名所指向的對象,不計入垃圾回收機制。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章