ES6 -- 新的数据结构:Set和Map
来源:互联网 发布:光环国际教育 大数据 编辑:程序博客网 时间:2024/05/30 23:30
Set
Set是和数组类似的数据结构,但是Set中,所有的成员值都是唯一的,也就是,没有重复值。
创建一个Set可以使用new Set()
方法:
const set = new Set();
然后,可以通过add()
方法向set中添加成员。
set.add(1);
如果在add过程中,添加了重复的成员,那么该成员将会被忽略。
另外,也可以直接向Set()中传递一个(类)数组作为参数来初始化一个新的set对象。
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);items.size // 5,可见重复的元素被忽略了
关于重复元素的说明:
1、向set中加入值的时候,不会发生类型转换。这也就意味着,1、“1”将会是两个不同的元素。
2、在JS中,我们知道,NaN是和自身不想等的,但是在set中,加入多个NaN则只会保存一个。(set认为NaN===NaN)
3、var a = {name:"xiaoming"}
和var b = {name:"xiaoming"}
是不相等的两个对象。
Set的属性和方法
1、size:返回set实例的元素数目
2、add():为Set添加元素。返回Set实例本身。这也就意味着,add()方法可以链式调用。
3、delete():删除某个值,返回布尔值表示是否成功删除。
4、has():查询set实例中是否有某个值,返回对应的布尔值。
5、clear():清除所有成员,无返回值。
6、
keys():返回set实例所有键名的遍历器
values():返回set实例所有键值的遍历器
entries():返回set实例所有键值对的遍历器
注:set中 键值 = 键名 = set元素本身
栗子:
let set = new Set(['red', 'green', 'blue']);for (let item of set.keys()) { console.log(item);}// red// green// bluefor (let item of set.values()) { console.log(item);}// red// green// bluefor (let item of set.entries()) { console.log(item);}// ["red", "red"]// ["green", "green"]// ["blue", "blue"]
7、forEach():与Array.forEach()方法类似,可以使用回调函数遍历所有成员。
另外,set数据结构有自己原生的[Symbol.iterator],可以用for of方法直接遍历:
let set = new Set(['red', 'green', 'blue']);for (let x of set) { console.log(x);}// red// green// blue
Map
不知道大家在使用ES5的Object对象的时候会不会有这样的不适:当你使用一个Object来作为键的时候,它被自动的转换为”[object Object]”这样的东西。这是因为,Object只能使用字符串来当作键,如果不是字符串,将会被自动转化为String。
Map就是为了解决这个问题而出现的新的数据结构,它允许任何类型的数据结构充当键。
const m = new Map();const o = {p: 'Hello World'};m.set(o, 'content')m.get(o) // "content" 成功!
初始化方法:
可以使用new Map()
来新建一个Map实例,同时,该方法可以接受一个数组A作为参数,数组A的元素是一个或多个数组——这些数组内仅包含两个元素,作为Map内成员的的键和值。
栗子:
const map = new Map([ ['name', 'Emily'],// 键:name ;值:‘Emily’ ['age', 18]]);map.size // 2map.has('name') // truemap.get('name') // "Emily"map.has('age') // truemap.get('age') // 18
Map规则:
如果对同一个键多次赋值,那么,后面的值将会覆盖前面的。
如果读取一个没有赋值的键,将返回undefined。
注意:
const map = new Map();map.set(['a'], 555);map.get(['a']) // undefinedmap.set({a:"a"}, 555);map.get({a:"a"}) // undefined
这是因为,[‘a’]和[‘a’],{a:”a”}和{a:”a”}虽然表面看上去一样,但他们的内存地址是不同的,它们被视为两个不同的值。(同set的判断元素是否重复的规则很像)
* Map的属性和方法 *
1、属性size:返回map结构的成员(键值对)总数
2、map.set(key,value):为map添加键值对。如果该键为新键则添加,否则就覆盖原有的值。
3、map.get(key):获取对应的值,如果找不到key,就返回undefined。
4、map.has(key):判断这个键是否存在,返回true或false。
5、map.delete(key):删除以key为键的键值对,成功返回true,否则返回false。
6、map.clear():清除所有成员。
7、
keys():返回Map实例所有键名的遍历器。
values():返回Map实例所有键值的遍历器。
entries():返回Map实例所有键值对的遍历器。
forEach():遍历Map实例所有成员。
(遍历顺序即插入顺序)
总结一下就是,
Set:值不重复的数组。
Map:可以采用任何数据结构作为键值的Object。
- ES6 -- 新的数据结构:Set和Map
- es6新特性-Set和Map数据结构
- ES6的数据结构set 和 map
- es6 set和map数据结构
- ES6中Set和Map数据结构的基本概念及应用
- 自学-ES6篇-Set和Map数据结构
- es6常见属性Set和Map数据结构
- ES6之Set和Map数据结构
- ES6 —(Set 和 Map 数据结构)
- es6的map和set
- ES6的Set和Map
- ES6(五) Set与Map的数据结构
- ES6-新数据结构Map
- 【ES6】set和map
- 【es6】Set 和 Map
- ES6--Set 和 Map
- ES6入门——Set和Map数据结构
- ES6学习笔记(五)Set和Map数据结构
- CString,string,char*之间的转换(转)
- 欢迎使用CSDN-markdown编辑器
- Java 多线程
- java从入门到弃坑第十三天0A0
- 统计学习方法概论
- ES6 -- 新的数据结构:Set和Map
- Can OGG Version 11 Be Used to Pump/Move Trails Generated from Version 9 or 10? (文档 ID 1297283.1)
- SpringMVC预处理方法参数HandlerMethodArgumentResolver类
- vivado编译综合全部通过但仿真却无法打开
- 字符串专题
- json11 c++ 用法
- rman创建备份
- 2015-12-09
- 1014. 福尔摩斯的约会 (20) PAT