ES6提供了新的数据结构——Set与Map,Set本身是一个构造函数且成员的值是唯一的,没有重复的值!!!Set()是一个存储已排序的无重复元素的数据而Map()是一对数据Map()使用关键值Key来标识每一个成员且Map()的value的值是可以重复的。
var a = new Set([1,1,2,2,3,4,5]); console.log([...a]); //[ 1, 2, 3, 4, 5 ] console.log(a.size); //5
var a = new Set(); a.add(1); a.add(1).add(2); console.log(a); //Set { 1, 2 } console.log(a.size); //2
2.为Set删除某值使用delete()方法,该方法返回的是一个布尔值,表示是否删除成功。
var a = new Set(); a.add(1); a.add(1).add(2); console.log(a); //Set { 1, 2 } console.log(a.size); //2 a.delete(1); console.log(a); //Set { 2 } console.log(a.size); //1
3.判断一个参数是否为Set参数可以使用has()方法,该方法会返回一个布尔值。
var a = new Set(); a.add(1); a.add(1).add(2); console.log(a.has(1)); //true console.log(a); //Set { 1, 2 } console.log(a.size); //2 a.delete(1); console.log(a.has(1)); //false console.log(a); //Set { 2 } console.log(a.size); //1
4.如果想清除所有Set的值那么使用clear()方法,该方法无返回值。
var a = new Set([1,2]); console.log(a.size); //2 a.clear(); console.log(a); //Set {} console.log(a.size); //0
第二大类:Set遍历操作,一共有四种方法,其实这四种方法本质上就是一个key:value对。
let set = new Set(['red', 'green', 'blue']); for ( let item of set.keys() ){ console.log(item); } // red green blue for ( let item of set.values() ){ console.log(item); } // red green blue for ( let item of set.entries() ){ console.log(item); } // ["red", "red"] ["green", "green"] ["blue", "blue"] set.forEach(function (values) { console.log(values); }); //red green blue
Map示例的方法有两大类:操作方法(增删查清)和遍历方法,下面就分别说下这两大类的方法。
第一大类:Map操作方法(与Set方法类似但是没有add只有get方法读取Map)
var map = new Map([["name", "张三"], ["title", "Author"]]); console.log(map.size); //2 console.log(map.has("name")); //true console.log(map.has("age")); //false console.log(map.get("name")); //张三 console.log(map.delete("name")); //true console.log(map.has("name")); //false console.log(map.size); //1 map.clear(); console.log(map.get("age")); //undefined console.log(map.size); //0
第二大类:Map遍历操作
var myMap = new Map(); myMap.set(0, "zero"); myMap.set(1, "one"); for (var key of myMap.keys()) { console.log(key); //0 1 } for (var value of myMap.values()) { console.log(value); //zero one } for (var item of myMap.entries()) { console.log(item[0] + " = " + item[1]); //0 = zero 1 = one } myMap.forEach(function(value, key) { console.log(key + " = " + value); }, myMap); //0 = zero 1 = one
最后简单的说下weakset与weakmap,他与set类似的有WeakSet()该方法无法遍历也没有size属性,他的成员只能是对象而不能是其他类型的值,他有三个方法.add()、.has()和.delete()方法,顺便说下如果WeakSet()方法没有被其他对象所引用那么就会被垃圾回收,与他类似的有WeakMap()。