ES6之Set与Map

1.Set

ES6提供了新的数据结构Set,类似于数组。但是成员的值都是唯一的,没有重复的。

Set本身是一个构造函数,用来生成Set数据结构。Set函数也可以接受一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化。

const s = new Set();

const set = new Set([1,2,3,3]);
[...set]
//[1,2,3]去除了数组的重复成员 

note:向Set添加值的时候,不会发生类型转换,例如字符串'true'和布尔值true是两个不同的值。其判断方法类似于精确相等运算符,区别在于NaN等于自身,精确相等运算符认为NaN不等于自身。

Set实例的属性与方法:

Set结构的实例属性:

--Set.prototype.constructor:构造函数,默认就是Set函数。

--Set.prototype.size:返回Set实例的成员总数。

Set结构的实例方法:

    a. 操作方法:--add(value):添加值,返回Set结构本身。

                        --delete(value):删除某个值,返回一个布尔值,表示是否删除成功。

                        --has(value):返回一个布尔值,表示Set结构是否存在该值。

                        --clear():清除所有成员,没有返回值。

   b. 遍历方法:--keys():遍历键名。

                        --values():遍历键值。

                        --entries():遍历键值对。

                        --forEach():使用回调函数遍历每个成员。

note:Set的遍历顺序就是插入顺序。Set没有键名,只有键值,keys方法和values方法行为完全一致。entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。

let set = new Set(['one', 'two', 'three']);

for (let item of set.keys()) {
  console.log(item);
}
// one
// two
// three

for (let item of set.values()) {
  console.log(item);
}
// one
// two
// three
for (let item of set.entries()) {
  console.log(item);
}
// ["one", "one"]
// ["two", "two"]
// ["three", "three"] 

Set 结构的默认遍历器生成函数是values方法。

Set.prototype[Symbol.iterator] === Set.prototype.values
// true

2.Map

ES6提供了Map数据结构,是键值对的集合,其“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。Map中的键是和内存地址绑定的,只要内存地址不一样,就认为是两个键(哪怕键的值一样)。如果Map的键是一个简单类型的值,只要值相同,Map将其视为一个键,所以0和-0是一个键。虽然NaN不严格等于 自身,Map视其为同一个键。

Map的属性和操作方法:

(1)size属性:返回Map结构的成员总数。

(2)set(key, value):设置键名key对应的键值为value,返回整个Map结构。可以采用链式写法。

let map = new Map()
  .set(1, 'a')
  .set(2, 'b')
  .set(3, 'c');

(3)get(key):读取key对应的键值。如果找不到key,返回undefined。

(4)has(key):返回一个布尔值,表示当前Map是否存在该键。

(4)delete(key):删除某个键,成功返回true,否则false。

(5)clear():清除所有成员,没有返回值。

Map遍历方法:(Map 的遍历顺序就是插入顺序。

--keys():返回键名的遍历器。

 --values():返回键值的遍历器。

 --entries():返回所有成员的遍历器。

--forEach():遍历 Map 的所有成员。

note:Map 结构的默认遍历器接口( Symbol.iterator属性),就是entries方法。

const map = new Map([
  ['F', 'false'],
  ['T',  'true'],
]);

// 等同于使用map.entries   即  for (let [key, value] of map.entries())
for (let [key, value] of map) {
  console.log(key, value);
}
// "F" "false"
// "T" "true"

猜你喜欢

转载自blog.csdn.net/freya_yyy/article/details/81053638