ES6的数据结构set 和 map
2017-06-09 18:07
691 查看
ES6为我们提供了两个数据结构 set 和 map ,用他们来处理我们的数据有时候会很方便。话不多说直接分析这两个方法。
一、 set数据结构
Set本身是一个构造函数,用来生成Set数据结构,类似于数组,但是成员的值都是唯一的。Set内部判断两个值是否不同,类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身;另外,两个对象总是不相等的。
1.set的用法(剔除重复数据)
var ary = [1,2,3,4,4,3,2,1]; let set = new Set(ary); console.log(set) // [1,2,3,4]
2.set的属性
①
Set.prototype.constructorset的构造函数默认是它本身
② Set.prototype.size 返回实例成员的总数。例如上边代码中
set.size // 返回的为4
3.set类似于数组的一些增删改查的方法
add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。
可以使用for…of.. 去遍历set内部元素
例如:
ary = ["a","b","c","d"] let set = new Set(ary); set.add("e") // ["a","b","c","d","e"] set.delete("a") // ["b","c","d","e"] set.has("b") // true set.clear() // []
使用for…of.. 去遍历set内部元素
var ary = ["a","b","c","d"]; let set = new Set(ary); for(a of set){ console.log(a) } //结果:a b c d
4.对数据的一些遍历操作(不只是针对set,比如map同样可用)
keys():返回一个键名的遍历器
values():返回一个键值的遍历器
entries():返回一个键值对的遍历器
forEach():使用回调函数遍历每个成员
首先set数据中的键名和值是一样的,所以keys()方法和values()方法对set 来说效果是一样的
var ary = ["a","b","c","d"]; let set = new Set(ary); console.log(set.keys()) //SetIterator {"a", "b", "c", "d"} console.log(set.values()) //SetIterator {"a", "b", "c", "d"} console.log(set.entries()) //SetIterator {["a", "a"], ["b", "b"], ["c", "c"], ["d", "d"]}
forEach():使用回调函数遍历每个成员(同样用于数组)
var ary = ["a","b","c","d"]; let set = new Set(ary); set.forEach(function(key,value,obj){ console.log(key) // 遍历键 console.log(value) //遍历值(不过set的键和值是相同的) console.log(obj) //返回遍历的对象 })
es6还提供了一个扩展数组的方法
...同样可用于set
例如:
var ary = ["a","b","c","d"]; let set = new Set(ary); console.log(set) //Set {"a", "b", "c", "d"} console.log([...set]) //["a", "b", "c", "d"]
这样我们数组去重就很简单的实现了:
var ary = ["a","b","c","d","c","a"]; let set = new Set(ary); let newAry = [...set] console.log(newAry)
5.set还可以实现合并集合,交叉集合。
例如:
①合并
var aryOne = ["a","b","c"]; var aryTwo = ["c","d","e"]; let setOne = new Set(aryOne); let setTwo = new Set(aryTwo); let newAry = new Set([...setOne,...setTwo]); console.log([...newAry])
二、map数据结构
1、map在es6中也是一种数据结构,map我们在这里翻译过来不能够认为是地图,而是映射。这就很容易让我们理解,map可以将键值对映射为新的对象。也就是一种新的存储数据的方法。2.map的使用方法:
①第一种
var obj = new Map(); obj.set("a",1); obj.get(a) // 1
②第二种
var obj = new Map([['name',"jhon"],["age",23]]); obj.get("name") // jhon
我们在用map 处理数据的时候,他的键和值看似像是json的键值对,其实还是有区别的,map的键我们可以是任何数据,例如:
var obj = new Map(); //对象 let ob = {"name":"asd"} obj.set(ob,"objcet") console.log(obj.get(ob)) //number obj.set(1,"number") console.log(obj.get(1)) // null obj.set(null,"null") console.log(obj.get(null)) // underfind obj.set(underfind,"underfind") console.log(obj.get(underfind))
重点内容 需要注意的是:
①如果Map的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map将其视为一个键,包括0和-0。
②另外,虽然NaN不严格相等于自身,但Map将其视为同一个键。
3.map 的一些基本操作方法和上边的set 是一样的,我这里就不在啰嗦的讲一遍了
相关文章推荐
- ES6中Set和Map数据结构的基本概念及应用
- ES6 —(Set 和 Map 数据结构)
- ES6新特性五:Set与Map的数据结构实例分析
- ES6 -- 新的数据结构:Set和Map
- ECMAScript 6 学习系列课程 (ES6 Set和Map数据结构)
- ES6(五) Set与Map的数据结构
- ES6---for...of遍历‘类似’数组的数据结构,array set map string与iterator
- ES6---新增数据结构set、map
- es6基础回顾--Set和Map
- es6学习笔记8--Map数据结构
- 对象容器 - Java对数据结构的封装 - List, ArrayList, LinkedList, Set, SortedSet, HashSet, Map, TreeMap
- STL中map、set的数据结构及底层实现
- ES6---扩展运算符和rest‘...’(三点运算符),在数组、函数、set/map等中的应用
- Java数据结构Map,List,Set及Queue相关的类图
- es6 map数据类型,要比set还很多
- ES6入门之set和map
- ES6的Set和Map
- java 数据结构Set Map遍历
- 数据结构-08-集合(Set)-哈希表(Hash)-图(Map)
- ES6 一种新的数据结构--Map跟Objct的区别