一、set
类似数组但是成员值是唯一的不重复的
初始化时可以用数组进行初始化
var set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] var s = new Set(); [2,3,2,2].map(x=>s.add(x)); for (let i of s) { console.log(i); } // 2 3在Set内部,两个NaN是相等。两个对象总是不相等的。
set提供4个方法:
1:add(v):添加某个值,返回Set结构本身。
2:delete(v):删除某个值,返回一个布尔值,表示删除是否成功。
3:has(v):返回一个布尔值,表示该值是否为Set的成员。
4:clear():清除所有成员,没有返回值
可以使用for of遍历
二、map
Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
var m = new Map(); var o = {p: "Hello World"}; m.set(o, "content") m.get(o) // "content" m.has(o) // true m.delete(o) // true m.has(o) // false注意,只有对同一个对象的引用,Map结构才将其视为同一个键
var map = new Map(); map.set(['a'], 1); map.get(['a']) // undefined 上面代码key内存地址是不一样的,因此get方法无法读取该键,返回undefined。Map提供的方法有:
1:size():返回Map成员个数
2:set(key,val):添加成员
3:get(key):获取成员
4:has(key):判断是否存在
5:delete(key):删除成员
6:clear():清空Map
Map可以使用keys();values();entries();forEach()遍历
for (let k of aaaaa.keys()) { console.log(k, aaaaa.get(k)); } for (let v of aaaaa.values()) { console.log(v); } for (let [k,v] of aaaaa.entries()) { console.log(k,v); } aaaaa.forEach((v,k)=>{console.log(k,v)})