es6特性---Set与Map

1 篇文章 0 订阅
本文详细介绍了Set和Map两种JavaScript内置数据结构,包括它们的构造原理、实例属性、操作方法(如添加、删除、查找、清空)和遍历方式。重点展示了Set的唯一成员特性与Map的键值对应关系,并通过实例演示了并集、交集和差集的计算。
摘要由CSDN通过智能技术生成

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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值