ES6--map集合 使用方法

2018/01/19 17:33
阅读数 1K

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结构转为数组结构,比较快速的方法是结合使用扩展运算符(…)。

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()。
展开阅读全文
es6
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部