es6 集合——迹忆客-ag捕鱼王app官网
es6引入了两个新的数据结构。map 和 集合。
- maps - 这种数据结构可以将一个键映射到一个值。
- 集合 - 集合类似于数组。然而,集合不鼓励重复。
map
map 对象是一个简单的键/值对。map 中的键和值可以是原始的或对象。
以下是相同的语法。
new map([iterable])
参数 iterable
代表任何可迭代的对象,其元素由一个键/值对组成。map 是有序的,也就是说,它们按照插入的顺序遍历元素。
map 属性
序号 | 属性 | 描述 |
---|---|---|
1 | map.prototype.size | 此属性返回map对象中键/值对的数量。 |
了解基本的map操作
set()
函数为map对象中的键设置值。set()
函数需要两个参数,即键和它的值。这个函数返回map对象。
has()
函数返回一个布尔值,表示在 map 对象中是否找到指定的键。这个函数需要一个键作为参数。
var map = new map();
map.set('name','fql jiyik');
map.get('name'); // fql jiyik
上面的例子创建了一个 nao 对象。该 map 只有一个元素。元素的键是由名称表示的。键被映射到一个值 fql jiyik 。
注意
- map 区分相似的值,但承担不同的数据类型。换句话说,一个整数键1被认为与一个字符串键 "1 "不同。考虑下面的例子来更好地理解这个概念
var map = new map();
map.set(1,true);
console.log(map.has("1")); //false
map.set("1",true);
console.log(map.has("1")); //true
上面代码输出结果如下
false
true
set()
方法也是可链接的。 考虑以下示例。
var roles = new map();
roles.set('r1', 'user')
.set('r2', 'guest')
.set('r3', 'admin');
console.log(roles.has('r1'))
上面代码输出结果如下
true
上面的例子,定义了一个地图对象。 该示例链接 set()
函数以定义键/值对。
get()
函数用于检索与指定键对应的值。
也可以向 map 构造函数传递一个数组。 此外,map 还支持使用展开运算符来表示数组。
var roles = new map([
['r1', 'user'],
['r2', 'guest'],
['r3', 'admin'],
]);
console.log(roles.get('r2'))
成功执行上述代码后会显示以下输出。
guest
注意
- 如果指定的键在 map 中不存在,则get()
函数返回 undefined 。
如果键已经存在于 map 中,则 set()
会替换该键的值。 考虑以下示例。
var roles = new map([
['r1', 'user'],
['r2', 'guest'],
['r3', 'admin'],
]);
console.log(`value of key r1 before set(): ${roles.get('r1')}`)
roles.set('r1','superuser')
console.log(`value of key r1 after set(): ${roles.get('r1')}`)
成功执行上述代码后会显示以下输出。
value of key r1 before set(): user
value of key r1 after set(): superuser
map 方法
序号 | 方法 | 描述 |
---|---|---|
1 | map.prototype.clear() | 从 map 对象中删除所有键/值对。 |
2 | map.prototype.delete(key) | 删除与键关联的任何值并返回 map.prototype.has(key) 之前返回的值。 |
3 | map.prototype.entries() | 返回一个新的 iterator 对象,该对象包含按插入顺序排列的 map 对象中每个元素的 [key, value] 数组。 |
4 | map.prototype.foreach(callbackfn[, thisarg]) | 按插入顺序为 map 对象中存在的每个键值对调用一次 callbackfn。 如果为 foreach 提供了 thisarg 参数,它将用作每个回调的“this”值。 |
5 | map.prototype.keys() | 返回一个新的 iterator 对象,它包含按插入顺序排列的 map 对象中每个元素的键。 |
6 | map.prototype.values() | 返回一个新的 iterator 对象,该对象包含按插入顺序排列的 map 对象中每个元素的 [key, value] 数组。 |
for…of 循环
以下示例说明了使用 for...of 循环遍历 map。
'use strict'
var roles = new map([
['r1', 'user'],
['r2', 'guest'],
['r3', 'admin'],
]);
for(let r of roles.entries())
console.log(`${r[0]}: ${r[1]}`);
成功执行上述代码后会显示以下输出。
r1: user
r2: guest
r3: admin
weak maps
weak map 与 map 相同,但有以下例外 -
它的键必须是对象。
weak map 中的键可以被垃圾收集。 垃圾收集是清除程序中未引用对象占用的内存的过程。
无法迭代或清除弱映射。
use strict'
let weakmap = new weakmap();
let obj = {};
console.log(weakmap.set(obj,"hello"));
console.log(weakmap.has(obj));// true
成功执行上述代码后会显示以下输出。
weakmap {}
true
集合
集合是 es6 数据结构。 它类似于数组,但它不能包含重复项。 换句话说,它允许我们存储唯一值。 集合支持原始值和对象引用。
就像 map 一样,集合也是有序的,即元素按其插入顺序迭代。 可以使用以下语法初始化集合。
集合属性
序号 | 属性 | 描述 |
---|---|---|
1 | set.prototype.size | 返回 set 对象中值的数量。 |
集合方法
序号 | 方法 | 描述 |
---|---|---|
1 | set.prototype.add(value) | 将具有给定值的新元素附加到 set 对象。 返回集合对象。 |
2 | set.prototype.clear() | 从 set 对象中移除所有元素。 |
3 | set.prototype.delete(value) | 删除与该值关联的元素。 |
4 | set.prototype.entries() | 返回一个新的 iterator 对象,该对象包含 set 对象中每个元素的 [value, value] 数组,按插入顺序排列。 这与 map 对象保持相似,因此每个条目在此处的键和值都具有相同的值。 |
5 | set.prototype.foreach(callbackfn[, thisarg]) | 按插入顺序为 set 对象中存在的每个值调用一次 callbackfn。 如果将 thisarg 参数提供给 foreach,它将用作每个回调的“this”值。 |
6 | set.prototype.has(value) | 返回一个布尔值,断言某个元素是否存在于 set 对象中并具有给定值。 |
7 | set.prototype.values() | 返回一个新的 iterator 对象,它包含按插入顺序排列的 set 对象中每个元素的值。 |
weak 集合
weak集只能包含对象,并且它们包含的对象可能会被垃圾收集。 与 weak map 一样,weak 集不能迭代。
'use strict'
let weakset = new weakset();
let obj = {msg:"hello"};
weakset.add(obj);
console.log(weakset.has(obj));
weakset.delete(obj);
console.log(weakset.has(obj));
成功执行上述代码后会显示以下输出。
true
false
迭代器
迭代器是一个允许一次访问一个对象集合的对象。 set 和 map 都有返回迭代器的方法。
迭代器是具有 next()
方法的对象。 调用 next()
方法时,它会返回一个具有“value”和“done”属性的对象。 'done' 是布尔值,这将在读取集合中的所有项目后返回 true
示例 1:集合和迭代器
var set = new set(['a','b','c','d','e']);
var iterator = set.entries();
console.log(iterator.next())
成功执行上述代码后会显示以下输出。
{ value: [ 'a', 'a' ], done: false }
由于该集合不存储键/值,因此值数组包含相似的键和值。 done 将是错误的,因为有更多的元素需要阅读。
示例 2:集合和迭代器
var set = new set(['a','b','c','d','e']);
var iterator = set.values();
console.log(iterator.next());
成功执行上述代码后会显示以下输出。
{ value: 'a', done: false }
示例 3:集合和迭代器
var set = new set(['a','b','c','d','e']);
var iterator = set.keys();
console.log(iterator.next());
成功执行上述代码后会显示以下输出。
{ value: 'a', done: false }
示例 4:map 和迭代器
var map = new map([[1,'one'],[2,'two'],[3,'three']]);
var iterator = map.entries();
console.log(iterator.next());
成功执行上述代码后会显示以下输出。
{ value: [ 1, 'one' ], done: false }
示例 5:map 和迭代器
var map = new map([[1,'one'],[2,'two'],[3,'three']]);
var iterator = map.values();
console.log(iterator.next());
成功执行上述代码后会显示以下输出。
{value: "one", done: false}
示例 6:map 和迭代器
var map = new map([[1,'one'],[2,'two'],[3,'three']]);
var iterator = map.keys();
console.log(iterator.next());
成功执行上述代码后会显示以下输出。
成功执行上述代码后会显示以下输出。