首页 > 语言 > JavaScript > 正文

详解ES6中的Map与Set集合

2024-05-06 15:41:30
字体:
来源:转载
供稿:网友

集合的概念以及和数组的区别

其实数组也是集合, 只不过数组的索引是数值类型.当想用非数值类型作为索引时, 数组就无法满足需要了.

而 Map 集合可以保存多个键-值对(key-value),  Set 集合可以保存多个元素.

对Map 和 Set 一般不会逐一遍历其中的元素. Map 一般用来存储需要频繁取用的数据,  Set 一般用来判断某个值是否存在其中.

ES 5 中对 Map 和 Set 的模拟方法

在ES 5 中,没有 Set和Map集合, 一般使用对象来模拟这两种集合, 对象的属性作为键(key),  以属性值作为值(value),  即以 property: property-value 来模拟 key-value 的形式. 具体实现如下:

模拟 Map 的键值对集合:

// 创建一个 Map 对象var map = Object.create(null);// 添加属性和属性值, 即 添加 key 和 valuemap.key1 = 'value 1';map.key2 = {};// 取得 key 对应的 value console.log(map.key1); // "value 1"console.log(map.key2); // "Object {}"

模拟 Set :

// 创建一个 Set 对象var set = Object.create(null);// 添加属性和属性值, 即 添加 key 并令其值为 true, 即表示这个key存在于集合中set.key = true;// 判断 key 是否存在, 然后进行下一步的操作if(set.key) { ... }

用对象模拟这两种集合的缺陷

由于对象中的属性名必须是字符串, 如果传入的不是字符串则会强制转换成对应的字符串类型

一般使用 if 语句来判断一个 key 是否存在于集合中,  当这个 key 对应的 value 为 false 或者可以被强制转换为 false 时,  则 if 语句认为这个key不存在.但是其实是存在的, 只不过 value = false 而已.

ES6 中的 Map 和 Set 集合

下面正式来讨论这两种集合的特点

Map

Map 中存储的是 key-value 形式的键值对,  其中的 key 和 value 可以是任何类型的,  即对象也可以作为 key . 这比用对象来模拟的方式就灵活了很多

Map 的创建和初始化

可以用new Map()构造函数来创建一个空的 Map

// 创建一个空的 Map let map = new Map();

也可以在 Map() 构造函数中传入一个数组来创建并初始化一个 Map. 传入的数组是二维数组, 其中的每一个子数组都有两个元素,  前者会被作为 key,  后者会被作为 value,  这样就形成了一个 key-value 键值对. 例如:

// 用数组来创建一个 非空的 Map let array = [ // 定义一个二维数组, 数组中的每子都有两个元素  ['key1' , 'value 1'],  // key 是 字符串 "key1", value 是字符串 "value 1"  [{} , 10086] ,     // key 是个对象, value 是数值 10086  [ 5, {} ]       // key 是个数值类型, value 是对象];let map = new Map(array); // 将数组传入 Map 构造函数中            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选