JavaScript------Set集合和Map集合

一、Set集合

Set集合是一种数据结构,类似于数组,但是不能存放重复的值 可以理解为Set 中的值总是唯一的。通常用于数组去重和字符串去重。

1、 创建集合

创建一个新的 Set 对象: new Set()

2、 常用方法:

        ⭐ add() :向集合中添加元素;

        ⭐ delete() :删除元素;

        ⭐ has() :判断集合中是否存在某个值;

        ⭐ clear() :清除集合中的所有元素。

let set =new Set
 set.add(1)
 set.add(2)
 set.add(1)

 set.add(3).add(12).add(15)

 console.log(set);//Set(5) { 1, 2, 3, 12, 15 }
 console.log(...set);//1 2 3 12 15
 console.log([...set]);//[ 1, 2, 3, 12, 15 ]

 set.delete(12)
 console.log(set);//Set(4) { 1, 2, 3, 15 }

 console.log(set.has(12));//false  判断集合中是否存在12
 console.log(set.has(15));//true  判断集合中是否存在15

set.clear()//清除集合中的所有元素
console.log(set);//Set(0) {}

3、集合元素的遍历

Set集合中key和value是相同的,所以 keys() values() 是一样的。

                ⭐获取集合的 keys() values() 进行遍历;

                ⭐通过 forEach() 循环。

//遍历
 for(let i of set.keys()){//keys()函数的作用:获取set中的所有键(key)返回值也是个集合
    console.log(i);
 }
console.log('----------');
 for(let i of set.values()){//values()函数的作用:获取set中的所有值(value)返回值也是个集合
    console.log(i);
 }
 //注意:Set中的key和value是相同的,即keys()和values()的返回值是一样的
 console.log('----------');
 //forEach循环遍历
 set.forEach(e=>{
    console.log(e);
 })

 

4、 通过数组来构造一个Set集合

 let arr=[11,22,33,44,55]
 let set1=new Set(arr)
 console.log(set1);//Set(5) { 11, 22, 33, 44, 55 }

5、通过Set实现集合的并集和交集

               ⭐并集;

//通过Set实现集合的并集和交集
 let arr =[1,2,3,4,5]
 let list = [4,5,6,7,8]

 let A=new Set(arr)
 let B=new Set(list)

 //并集
 let C=new Set([...A,...B])//A和B的并集
 console.log('A集合',...A);
 console.log('B集合',...B);
 console.log('C集合',...C);

                ⭐交集。

//通过Set实现集合的并集和交集
 let arr =[1,2,3,4,5]
 let list = [4,5,6,7,8]

 let A=new Set(arr)
 let B=new Set(list)

 //交集
 let D=new Set([...A].filter(val=>B.has(val)))//通过filter拿到符合条件的值
 console.log('A集合',...A);
 console.log('B集合',...B);
 console.log('D集合',...D);

  

6、WeakSet集合 

           WeakSet集合只能存放对象,支持 add() delete() has() ,不支持size和keys()。

let ws = new WeakSet()
let jack ={
    uname:'jack',
    age:21
}
ws.add(jack);
console.log(ws.has(jack));//true
ws.delete(jack)
console.log(ws.has(jack));//false

 

二、Map集合

在ES5中没有MAP,但是有object对象(采用hash结构:key-value),键(key)的数据类型只能是字符串。

const map1 = new Map();

map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);

console.log(map1.get('a'));//1

ES6中增加了Map。

1、属性

      size() 表示集合中元素的个数。

2、常用方法

                    ⭐ set() :添加数据;

                    ⭐ get() :获取参数;

                    ⭐ has() :判断某个key是否存在;

                    ⭐ delete() :删除key;

                    ⭐ clear() :清除所有的key。

let map = new Map()//创建Map

map.set('id', 1001)//set(key,value)
map.set('name', 'andy')
map.set('age', 10)

console.log(map.size);//3
let n = map.get('name')
console.log(n);//andy

console.log(map.has('age'));//true

map.delete('id')
console.log(map.has('id'));//false

map.clear()
console.log(map);//Map(0) {}

3、遍历方法

                    注意:Map的遍历顺序就是插入顺序。

                   ⭐ keys() :获取Map的所有key;

                    ⭐ values() :获取Map的所有值;

                    ⭐ entries() :获取Map的所有成员;

                    ⭐ forEach() :遍历Map的所有成员。

const map = new Map([
    ['F', 'no'],
    ['T', 'yes']
]);

for (let key of map.keys()) {
    console.log(key);//F//T   
}

for (let value of map.values()) {
    console.log(value);//no//yes    
}

for (let entry of map.entries()) {
    console.log(entry);//[ 'F', 'no' ]//[ 'T', 'yes' ]    
}

for (let [key, val] of map.entries()) {
    console.log(`${key}:${val}`);//F:no//T:yes  
}

map.forEach(function (key, val) {
    console.log(`${key}:${val}`);//no:F//yes:T  
});
 //函数带两个参数,第一个对应key,第二个参数对应value;若函数只有一个参数则对应value

               

4、转化为数组

将Map集合转为数组可以使用'...'运算符。

let map = new Map()//创建Map

map.set('id', 1001)//set(key,value)
map.set('name', 'andy')
map.set('age', 10)
map.set('address', '小沛')

//讲key转化成数组
let k = [...map.keys()]
console.log(k);//[ 'id', 'name', 'age', 'address' ]

//将value转化为数组
let v = [...map.values()]
console.log(v);//[ 1001, 'andy', 10, '小沛' ]

//将key-value转化为数组
let obj = [...map.entries()]
console.log(obj);
// [
//     [ 'id', 1001 ],
//     [ 'name', 'andy' ],
//     [ 'age', 10 ],
//     [ 'address', '小沛' ]
//   ] 

5、对Map中的元素进行过滤

对Map中的元素进行过滤可以使用过滤器 filter()

let map = new Map()
map.set('101', 5)
map.set('102', 12)
map.set('103', 25)
map.set('104', 39)
map.set('105', 46)
map.set('106', 58)
console.log(map);
//将map中value是偶数的键值对(key-value)过滤出来,存入一个新的map中

let map1 = new Map([...map].filter(function ([key, val]) {
    if (val % 2 == 0) {
        return [key, val]
    }
}))
console.log(map1);//Map(3) { '102' => 12, '105' => 46, '106' => 58 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值