ES6的 Map & Set


Set

ES6提供了新的數據結構Set。它類似于數組,但是成員的值都是唯一的,沒有重復的值(*因此可以不要像以前那樣遍歷數組去重)學習一個新特性可以試著看看他出現的原原因

Set函數可以接受一個數組(或類似數組的對象)作為參數,用來初始化。

// 例一
var set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]

var s = new Set();

[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x));

for (let i of s) {
  console.log(i);
}
// 2 3 5 4

在Set內部,兩個NaN是相等。兩個對象總是不相等的。可以用length來檢測

四個操作方法:

  • add(value):添加某個值,返回Set結構本身。
  • delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。
  • has(value):返回一個布爾值,表示該值是否為Set的成員。
  • clear():清除所有成員,沒有返回值

set內部的元素可以遍歷for...of...


Map

Map結構提供了“值—值”的對應,是一種更完善的Hash結構實現。如果你需要“鍵值對”的數據結構,Map比Object更合適。它類似于對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當作鍵。

var m = new Map();
var o = {p: "Hello World"};

m.set(o, "content")
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false

注意,只有對同一個對象的引用,Map結構才將其視為同一個鍵。這一點要非常小心。

var map = new Map();

map.set(['a'], 555);
map.get(['a']) // undefined
// 因為 ['a'] !== ['a'] 這是兩個對象只是長得一樣

上面代碼的set和get方法,表面是針對同一個鍵,但實際上這是兩個值,內存地址是不一樣的,因此get方法無法讀取該鍵,返回undefined。

如果Map的鍵是一個簡單類型的值(數字、字符串、布爾值),則只要兩個值嚴格相等,Map將其視為一個鍵,包括0和-0。另外,雖然NaN不嚴格相等于自身,但Map將其視為同一個鍵。

實例屬性和方法:size、set、get、has、delete、clear

遍歷方法:keys()、values()、entries()、forEach()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。