ES6+ Map定义
发布时间:2023-03-27 13:51:31 所属栏目:教程 来源:
导读:在 ES5 中使用 Object 来存储对象,然而这种存储存在一些问题,比如说 Object 中的键是无序的,Object 的键只能是字符串类型等等。ES6 提供了 Map 数据结构,保存的是键值对,而且能够记住键的插入顺序,并且任何值
在 ES5 中使用 Object 来存储对象,然而这种存储存在一些问题,比如说 Object 中的键是无序的,Object 的键只能是字符串类型等等。ES6 提供了 Map 数据结构,保存的是键值对,而且能够记住键的插入顺序,并且任何值 (对象或者原始值) 都可以作为一个键或一个值,这样极大地扩展了数据存储的场景。 在前面的 数据结构扩展 一节我们已经了解到 Map 的基本使用。和 Set 一样,Map 也是一个构造函数,不能直接使用,需要通过 new 的方式来创建一个 Map 实例。 var map = Map([iterable]); Map 对象在插入数据时是按照顺序来插入的,也就是说在插入时会保持插入的位置,Object 的在插入数据时没有顺序概念。Map 对象可以被 for...of 循环,在每次迭代后会返回一个形式为 [key,value] 的数组,这个我们在下面的例子中会说到。 Map 的本质其实还是一个对象,并且它也是继承 Object 的,看下面的实例: var map = new Map([["x", ], ["y", ]]); console.log(map instanceof Object); //true 从上面的代码中可以看出 Object 在实例 map 的原型链上。 在创建 Map 实例时可以接收一个数组或是一个可遍历的对象作为参数,这个参数内的每一项是键值的组合 [key, value] 第一个值时键,第二个值时键的值。 在初始化 Map 对象时,如果默认参数的数组中超过两个以上的值不会被 Map 对象读取。 var map = new Map([["x", , 'a', 'b'], ["y", , 'c'], ["z", , 'd']]); console.log(map) // Map(3) {"x" => 1, "y" => 2, "z" => 3} 上面的代码中,从打印的结果可以看出,数组中超过的元素都会被自动忽略。 Map 提供的属性和方法从增、删、改、查几个方面入手,主要有以下 5 种: 方法名 描述 set 接收键值对,向 Map 实例中添加元素 get 传入指定的 key 获取 Map 实例上的值 delete 传入指定的 key 删除 Map 实例中对应的值 clear 清空 Map 实例 has 传入指定的 key 查找在 Map 实例中是否存在 size 属性,返回 Map 实例的长度 Map 提供 size 属性可以获取 Map 实例上的长度 var map = new Map([["x", ], ["y", ], ["z", ]]); console.log(map.size) // 3 set() 方法为 Map 实例添加或更新一个指定了键(key)和值(value)的键值对。 myMap.set(key, value); 通常情况下不会一开始就初始化值,而是动态地添加,或更新 Map 时需要用到 set 方法,可以新增和修改 Map 实例的值。而且 key 值可以是任意类型的,查看如下示例: var map = new Map(); var str = 'string'; var obj = {}; var arr = []; var fun = function() {}; map.set(str, '键的类型字符串'); map.set(obj, '键的类型对象'); map.set(arr, '键的类型数组'); map.set(fun, '键的类型函数'); 上面的代码中,我们定义了不同类型的变量,使用这些变量为 map 添加数据。相比 Object 对象,扩展性更强了。另外还可以链式添加键值对: var map = new Map(); map.set('a', ).set('b', ).set('c', ); console.log(map); // Map(3) {"a" => 1, "b" => 2, "c" => 3} 使用链式添加键值对的方式比较简洁,如果需要添加多个值,建议使用这样的方式去添加。 get() 方法是接收一个指定的键(key)返回一个 Map 对象中与这个指定键相关联的值,如果找不到这个键则返回 undefined。 myMap.get(key); 使用上面的示例,可以通过 get 方法获取对应的值: console.log(map.get('string')); // "键的类型字符串" console.log(map.get(str)); // "键的类型字符串" console.log(map.get(obj)); // "键的类型对象" console.log(map.get(arr)); // "键的类型数组" console.log(map.get(fun)); // "键的类型数组" 上面的代码可以看出,我们可以直接使用键的值去获取 Map 实例上对应的值,也可以通过定义变量的方式去获取。 has() 方法是用于判断指定的键是否存在,并返回一个 bool 值,如果指定元素存在于 Map 中,则返回 true,否则返回 false。 myMap.has(key); 实例: var map = new Map(); map.set("a", ); map.has("a"); // true map.has("b"); // false delete() 方法用于移除 Map 实例上的指定元素,如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 false。 myMap.delete(key); 实例: var map = new Map(); map.set("a", ); map.delete("a"); // true map.has("a"); // false clear() 方法会移除 Map 对象中的所有元素,返回 undefined。 myMap.clear(key); 实例: var map = new Map(); map.set("a", ); map.clear(); // 返回 undefined 这里需要注意的是 clear() 返回的值是 undefined 而不是 true 所以如果在判断结果的时候需要注意这一点。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |