1、Set本身是构造函数,借用Set构造函数生成的实例数据结构类似数组,且实例里面的值为唯一属性。
注意:Set函数接收的是数组或是可遍历的数据结构作为参数。
Set结构实例本身有2个属性、4个操作方法、4个循环方法。
两个属性
Set.prototype.constructor属性,就是Set函数本身
Set.prototype.size属性,set结构成员数量
let set = new Set();
console.log(set.constructor==Set) //true
console.log(set.size) // 0
let set1= new Set([1,2,3,2,1,4]);
console.log(set1) // set1里面只有1,2,3,4四个成员 重复的已被自动去除
console.log(set1.size) //4
console.log([...set1]) 可通过扩展运算符取出set1里面的数据,转成数组
八个方法分为:4个操作方法和4个循环方法
4个操作方法
Set.prototype.add(value) 向实例中添加成员 返回set结构
Set.prototype.delete(value) 从实例中删除成员 返回布尔值表示删除成功与否
Set.prototype.has(value) 判断实例中是否有某个成员 返回布尔值表示有与无
Set.prototype.clear() 清楚实例中所有成员 没有返回值
let set1= new Set([1,2,3,2,1,4]);
console.log(set1)
上面的 let set1= new Set([1,2,3,2,1,4]); 代码等同于下面的三行代码实现:
var arr1 = [1,2,3,2,1,4]
let set1= new Set();
arr1.forEach(item=>{ set1.add(item) })
set1.delete(2) // true
set1.has('c') //false
set1.has(1) //true
set1.clear()
4个循环方法
set数据结构只有值没有键,所以keys()和values() 返回是一致的
Set.prototype.keys() 返回set数据结构键名的遍历器
Set.prototype.values() 返回set数据结构键值的遍历器
Set.prototype.entries() 返回set数据结构键值对的遍历器
Set.prototype.forEach() 遍历set数据结构每个成员
let set = new Set([1,2,3,2,1,4]);
set.forEach((key,value)=>{console.log(key,value)})
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
2、Map本身也是构造函数,Map实例的数据结构键名也具有唯一性,所有如果我们设置键为一个对象,那就不会和任何成员重复。
注意:Map函数接收的是数组或是可遍历的数据结构作为参数。
Map结构实例本身有2个属性、5个操作方法、4个循环方法。
两个属性
Map.prototype.constructor属性,就是Map函数本身
Map.prototype.size属性,Map结构成员数量
let map = new Map([ [1,2],[2,3] ]);
console.log(map.constructor==Map) //true
console.log(map.size)
5个操作方法
Map.prototype.get(key) 获取key的值 有值返回值 无值返回undefined
Map.prototype.set(key,value) 返回整个map结构,设置键名key值为value,如果key有值则覆盖
Map.prototype.has(key) 返回布尔值 是否存在键名为key的值
Map.prototype.delete(key) 返回布尔值 删除某个键
Map.prototype.clear() 清楚实例中所有成员 没有返回值
let map1 = new Map([ ['a',1],['a',2],[{'p':'mason'}, 'hello'], [{'p':'mason'}, 'hello'] ]);
map1.get('a') //2 键名为‘a’ 第二个值覆盖第一个 map结构唯一性
let map = new Map([ ['a',1],[{'p':'mason'}, 'hello']])
map.get('a') //1
map.get('b') //undefined
map.set('b',1) //
map.get('b') //true
map.delete('b') //true
map.clear()
4个遍历方法
Map.prototype.keys() 返回Map数据结构键名的遍历器
Map.prototype.values() 返回Map数据结构键值的遍历器
Map.prototype.entries() 返回Map数据结构键值对的遍历器
Map.prototype.forEach() 遍历Map数据结构每个成员
let map = new Map([ ['a',1],[{'p':'mason'}, 'hello']])
for(var item of map.entries()){ //此处只能使用for ... of ,因为for...in无法循环set和map数据结构
console.log(item[0],item[1])
}
输出
a 1
{p: "mason"} "hello"
var map1 = new Map([ ['a',1],['a',2],[{'p':'mason'}, 'hello'], [{'p':'mason'}, 'hello'] ])
map1.forEach((value,key)=>{console.log(key,value)})
输出
a 2
{p: "mason"} "hello"
{p: "mason"} "hello"