ES6小册子

您所在的位置:网站首页 es6的map和set的区别 ES6小册子

ES6小册子

2022-05-26 14:58| 来源: 网络整理| 查看: 265

你好,这是《ES6小册子》的第七章,谢谢你的订阅。怎么理解Set和Map呢?有的人会说Set就是特殊的数组,Map就是特殊的对象。作为一名优秀的前端工程师,肯定不能满足于这种理解的。今天就和大家讲讲set和map的特点。

1.Map

Map和Object比较类似,都属于键值对的结构。Map和Object不同的点主要是:对象的键值(Key)只能是String类型的,而Map可以使用任何基本数据类型作为键值。Map的这一特性让它很受欢迎,另外Map的性能也要优于Object。

1.1 新建Map

Map和Set都是ES6新增的数据结构,二者都是构造函数,可以通过其新建Map。

let map = new Map();

这种方式是新建一个空的Map,你也可以传入一个二维数组来初始化一个Map。

let map = new Map([[1,'a'],[2,'b']]); 1.2 添加Map键值对 map.set(3,'c'); 1.3 获取Map值 map.get(3); 1.4 删除Map键值对 map.delete(3); 1.5 判断Map键值是否存在,存在返回true,不存在返回false。 map.has(3); 1.6 获取Map大小,返回键值对的个数 map.size; //2 1.7 清除所有键值对 map.clear();

需要注意的是Map中的key值不能重复,如果设置的时候键值已经存在,则后设置的值会覆盖之前的值。说到这里还有两个特殊情况需要注意,在Map中认为NaN===NaN, -0===+0。

另外在设置键值对的时候可以采用链式写法。

map.set(4,'d').set(5,'e').set(6,'f').size;

如果你看到身边小伙伴还在不断地写 map.set();map.set()...,你可以告诉他可以链式写。别忘了收费~

1.7 循环

循环获取对象的key或者value使用的是 for(let key in object),Map稍有不同。

// 循环键值 for (let key of map.keys()){} // 循环值 for (let value of map.values()){} // 循环键值对 for (let entry of map.entries()){console.log(entry[0],entry[1])}

这里你可以利用ES6的解构赋值简写循环键值对。

// 循环键值对 for (let [key,value] of map.entries()){console.log(key,value)}

ES6还有很多新特性可以结合使用,因为Map可以接收数组,一些API的返回也是数组。可以结合...操作符,以及数组的map,reduce,filter等实现强大而简洁的代码。

2.Set

Set和数组比较类似,与数组不同的是set内的元素不能重复。这特性对于数组去重有着巨大的作用。之前数组去重尽管方式很多,但是有的逻辑复杂,有的不能处理NaN。Set不仅能处理好NaN,而且速度更快。

你好,这是《ES6小册子》的第七章,谢谢你的订阅。怎么理解Set和Map呢?有的人会说Set就是特殊的数组,Map就是特殊的对象。作为一名优秀的前端工程师,肯定不能满足于这种理解的。今天就和大家讲讲set和map的特点。

1.Map

Map和Object比较类似,都属于键值对的结构。Map和Object不同的点主要是:对象的键值(Key)只能是String类型的,而Map可以使用任何基本数据类型作为键值。Map的这一特性让它很受欢迎,另外Map的性能也要优于Object。

1.1 新建Map

Map和Set都是ES6新增的数据结构,二者都是构造函数,可以通过其新建Map。

let map = new Map();

这种方式是新建一个空的Map,你也可以传入一个二维数组来初始化一个Map。

let map = new Map([[1,'a'],[2,'b']]); 1.2 添加Map键值对 map.set(3,'c'); 1.3 获取Map值 map.get(3); 1.4 删除Map键值对 map.delete(3); 1.5 判断Map键值是否存在,存在返回true,不存在返回false。 map.has(3); 1.6 获取Map大小,返回键值对的个数 map.size; //2 1.7 清除所有键值对 map.clear();

需要注意的是Map中的key值不能重复,如果设置的时候键值已经存在,则后设置的值会覆盖之前的值。说到这里还有两个特殊情况需要注意,在Map中认为NaN===NaN, -0===+0。

另外在设置键值对的时候可以采用链式写法。

map.set(4,'d').set(5,'e').set(6,'f').size;

如果你看到身边小伙伴还在不断地写 map.set();map.set()...,你可以告诉他可以链式写。别忘了收费~

1.7 循环

循环获取对象的key或者value使用的是 for(let key in object),Map稍有不同。

// 循环键值 for (let key of map.keys()){} // 循环值 for (let value of map.values()){} // 循环键值对 for (let entry of map.entries()){console.log(entry[0],entry[1])}

这里你可以利用ES6的解构赋值简写循环键值对。

// 循环键值对 for (let [key,value] of map.entries()){console.log(key,value)}

ES6还有很多新特性可以结合使用,因为Map可以接收数组,一些API的返回也是数组。可以结合...操作符,以及数组的map,reduce,filter等实现强大而简洁的代码。

2.Set

Set和数组比较类似,与数组不同的是set内的元素不能重复。这特性对于数组去重有着巨大的作用。之前数组去重尽管方式很多,但是有的逻辑复杂,有的不能处理NaN。Set不仅能处理好NaN,而且速度更快。

你好,这是《ES6小册子》的第七章,谢谢你的订阅。怎么理解Set和Map呢?有的人会说Set就是特殊的数组,Map就是特殊的对象。作为一名优秀的前端工程师,肯定不能满足于这种理解的。今天就和大家讲讲set和map的特点。

1.Map

Map和Object比较类似,都属于键值对的结构。Map和Object不同的点主要是:对象的键值(Key)只能是String类型的,而Map可以使用任何基本数据类型作为键值。Map的这一特性让它很受欢迎,另外Map的性能也要优于Object。

1.1 新建Map

Map和Set都是ES6新增的数据结构,二者都是构造函数,可以通过其新建Map。

let map = new Map();

这种方式是新建一个空的Map,你也可以传入一个二维数组来初始化一个Map。

let map = new Map([[1,'a'],[2,'b']]); 1.2 添加Map键值对 map.set(3,'c'); 1.3 获取Map值 map.get(3); 1.4 删除Map键值对 map.delete(3); 1.5 判断Map键值是否存在,存在返回true,不存在返回false。 map.has(3); 1.6 获取Map大小,返回键值对的个数 map.size; //2 1.7 清除所有键值对 map.clear();

需要注意的是Map中的key值不能重复,如果设置的时候键值已经存在,则后设置的值会覆盖之前的值。说到这里还有两个特殊情况需要注意,在Map中认为NaN===NaN, -0===+0。

另外在设置键值对的时候可以采用链式写法。

map.set(4,'d').set(5,'e').set(6,'f').size;

如果你看到身边小伙伴还在不断地写 map.set();map.set()...,你可以告诉他可以链式写。别忘了收费~

1.7 循环

循环获取对象的key或者value使用的是 for(let key in object),Map稍有不同。

// 循环键值 for (let key of map.keys()){} // 循环值 for (let value of map.values()){} // 循环键值对 for (let entry of map.entries()){console.log(entry[0],entry[1])}

这里你可以利用ES6的解构赋值简写循环键值对。

// 循环键值对 for (let [key,value] of map.entries()){console.log(key,value)}

ES6还有很多新特性可以结合使用,因为Map可以接收数组,一些API的返回也是数组。可以结合...操作符,以及数组的map,reduce,filter等实现强大而简洁的代码。

2.Set

Set和数组比较类似,与数组不同的是set内的元素不能重复。这特性对于数组去重有着巨大的作用。之前数组去重尽管方式很多,但是有的逻辑复杂,有的不能处理NaN。Set不仅能处理好NaN,而且速度更快。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3