es6 新数据结构 Map和Set

Set

类似于数组,但是成员的值是唯一的,没有重复的值

创建实例

  • Set本身是一个构造函数,用来生成Set数据结构
var set = new Set();
  • Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
var set = new Set([1,2,3,4,1,2,3,4]);

set // Set(4){1,2,3,4}

// 注意,不可以使用set[index]来获取值;
  • 向Set添加值的时候,不会发生类型转换
var set = new Set();

set.add(1);
set.add("1");

set // Set(2){1,"1"}
  • Set 内部的 NaN 是相等的
var set = new Set();

set.add(NaN);
set.add(NaN);

set // Set(1){NaN}
  • Set 内部的 对象总是不等的
var set = new Set();

set.add({});
set.add({});

set // Set(2){{},{}}

Set实例的属性

  • Set.prototype.constructor: 构造函数,默认就是Set函数
  • Set.prototype.size; 返回Set实例的成员总数;

Set实例的方法

  • add(value):添加某个值(末尾添加),返回Set结构本身。
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。
var set = new Set();

set.add(1); //Set(1) {1}
set.has(1); //true
set.has(2)  //false
set.delete(1)  //true
set.clear()   // 无返回值
  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():使用回调函数遍历每个成员
// 由于set没有键名,只有键值,所以keys、values、entries 返回的都一样;

let set = new Set();
set.add(1);
set.add(2);

set.keys();  // SetIterator {1, 2}
set.values(); // SetIterator {1, 2}
set.entries(); // SetIterator {1, 2}

// foreach();
// key和value 相等;

set.forEach((value,key) => 
            console.log("value:" + value +",key:" + key));
value:1,key:1
value:2,key:2

Set和Array转换

  • 使用Array.from;
var set = new Set();
var array = Array.from(set) // set变成了数组;
  • 使用扩展运算符(…)
var array = [...new Set([1,2])] // array 是一个数组;

Map

类似于对象,是键值对的集合,但是键的范围不限于字符串,各种类型的值(包括对象)都可以当作键,也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应

  • 不重复的键值,新添加的键值会覆盖原值;

Map实例的属性

  • size 返回map的的长度;

Map实例的方法

  • set (key, value) 保存值
  • get (key) 查找某个键,成功返回值,失败返回undefind;
  • has (key) 查找某个键,成功返回true,失败返回false;
  • delete (key) 删除某个键,成功返回true,失败返回false;
  • clear () 清除所有成员,没有返回值

Map原生提供三个遍历器生成函数和一个遍历方法。

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历Map的所有成员。
let map = new Map();
map.set("one",1);
map.set("two",2);

// 只有键
map.keys()  // MapIterator {"one", "two"}
// 只有值
map.values() // MapIterator {1, 2}
// 有键和值
map.entries() // MapIterator {"one" => 1, "two" => 2}

// 先拿到value 再拿到key 还有一个[Object map]数值;
map.forEach((value, key) =>  
            console.log(key + " " + value));
// one 1
// two 2

Map和数组类型转换

let map = new Map();
map.set("one",1);
map.set("two",2);
// Map转数组
let array = [...map];
array // [["one",1], ["two",2]];

let array = [...map.values()];
array // [1, 2];

// 数组转Map
array = [["one",1], ["two",2]];
let map1 = new Map(array); 

array = [["one",1,3], ["two",2,4]];
let map2 = new Map(array);

map1 = map2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值