ES6--map集合 使用方法

Map 是一個「超對象」,其 key 除了能夠是 String 類型以外,還能夠爲其餘類型(如:對象)數組

var m = new Map();

o = {p: "Hello World"};

m.set(o, "content")

document.write(m.get(o))
// "content"

size:返回成員總數。
set(key, value):設置一個鍵值對。
get(key):讀取一個鍵。
has(key):返回一個布爾值,表示某個鍵是否在Map數據結構中。
delete(key):刪除某個鍵。
clear():清除全部成員。
keys():返回鍵名的遍歷器。
values():返回鍵值的遍歷器。
entries():返回全部成員的遍歷器。

實例的屬性和操做方法數據結構

size:返回成員總數。
set(key, value):設置key所對應的鍵值,而後返回整個Map結構。若是key已經有值,則鍵值會被更新,不然就新生成該鍵。
get(key):讀取key對應的鍵值,若是找不到key,返回undefined。
has(key):返回一個布爾值,表示某個鍵是否在Map數據結構中。
delete(key):刪除某個鍵,返回true。若是刪除失敗,返回false。
clear():清除全部成員,沒有返回值。

set()方法返回的是Map自己,所以能夠採用鏈式寫法。
let map = new Map()
  .set(1, 'a')
  .set(2, 'b')
  .set(3, 'c');
  document.write(map);

has()和delete()的例子
var m = new Map();

m.set("edition", 6)        // 鍵是字符串
m.set(262, "standard")     // 鍵是數值
m.set(undefined, "nah")    // 鍵是undefined

var hello = function() {document.write("hello");}
m.set(hello, "Hello ES6!") // 鍵是函數

m.has("edition")     // true
m.has("years")       // false
m.has(262)           // true
m.has(undefined)     // true
m.has(hello)         // true

m.delete(undefined)
m.has(undefined)       // false

m.get(hello)  // Hello ES6!
m.get("edition")  // 6


size屬性和clear方法的例子。
let map = new Map();
map.set('foo', true);
map.set('bar', false);

map.size // 2
map.clear()
map.size // 0

遍歷方法 
keys():返回鍵名的遍歷器。 
values():返回鍵值的遍歷器。 
entries():返回全部成員的遍歷器。函數

let map = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);

for (let key of map.keys()) {
  document.write(key);
}
// "F"
// "T"

for (let value of map.values()) {
  document.write(value);
}
// "no"
// "yes"

for (let item of map.entries()) {
  document.write(item[0], item[1]);
}
// "F" "no"
// "T" "yes"

// 或者
for (let [key, value] of map.entries()) {
  document.write(key, value);
}

// 等同於使用map.entries()
for (let [key, value] of map) {
  document.write(key, value);
}

Map結構轉爲數組結構,比較快速的方法是結合使用擴展運算符(…)。code

let map = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);
[...map.keys()]
// [1, 2, 3]
[...map.values()]
// ['one', 'two', 'three']
[...map.entries()]
// [[1,'one'], [2, 'two'], [3, 'three']]
[...map]
// [[1,'one'], [2, 'two'], [3, 'three']]

Map還有一個forEach方法,與數組的forEach方法相似,也能夠實現遍歷。
map.forEach(function(value, key, map)) {
  document.write("Key: %s, Value: %s", key, value);
};

WeakMap 
WeakMap結構與Map結構基本相似,惟一的區別是它只接受對象做爲鍵名(null除外),不接受原始類型 
的值做爲鍵名,並且鍵名所指向的對象,不計入垃圾回收機制。set()和get()分別用來添加數據和獲取數據:對象

var map = new WeakMap(),
    element = document.querySelector(".element");

map.set(element, "Original");

// 下面就能夠使用了
var value = map.get(element);
document.write(value);             // "Original"

WeakMap與Map在API上的區別主要是兩個:

一是沒有遍歷操做(即沒有key()、values()和entries()方法),也沒有size屬性;
二是沒法清空,即不支持clear方法。這與WeakMap的鍵不被計入引用、被垃圾回收機制忽略有關。
所以,WeakMap只有四個方法可用:get()、set()、has()、delete()。
相關文章
相關標籤/搜索