Set Map集合

SET

数组去重,使用set

ES6中新增了数据类型Set,Set的一个最大的特点就是数据不重复Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。

const array = [1, 3, 2, 4, 3, 1, 5, 6, 8]
function newArray (item) {
    const newArr = new Set(item)//.new Set方法,返回是一个类数组,需要
    console.log([...newArr])//结合 ...运算符,转成真实数组
    console.log(Array.from(newArr))//结合 Array.from ,转成真实数组
}
newArray(array)

1.set集合的创建

//方法1:创建一个没有任何内容的set集合
const s1 = new Set()
console.log(s1)
//方法2:创建一个具有初始内容的set集合,内容来自于可迭代对象每一次迭代的结果
const s2 = new Set('abcdabcd')
console.log(s2)

  2.对set集合进行后续的操作

  • add(数据):添加一个数据到set集合末尾,如果数据已存在,则不进行任何操作
  • set使用Object.is的方式来判断两个数据是否相同,但是,针对+0和-0,set认为是相等的
const s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(1) //无效
s1.add(+0)
s1.add(-0) //无效
console.log(s1)

  • has(数据):判断set中是否存在对应的数据
  • delete(数据):删除匹配的数据,返回是否删除成功
  • clear():清空整个set集合
  • size:获取set集合中的元素数量,只读属性,无法重新赋值 
s1.has(1) //true
s1.delete(2)//new Set([1,0])

3. 使用for of 循环

const s1 = new Set('12345')
console.log(s1)
for (const iterator of s1) {
    console.log(iterator)
}

4.forEach循环

const s1 = new Set('12345')
console.log(s1)
s1.forEach((item, index, s) => {
    console.log('item:', item, 'index:', index, 'set:', s);
})

set集合中不存在下标,因此forEach中的回调的第二个参数和第一个参数是一致的,均表示set中的每一项 

5.两个数组交集、并集、差集 

 首先准备两个数组

const arr1 = [22, 1, 2, 5, 32, 78, 34, 25]
const arr2 = [22, 34, 56, 2, 11, 67, 78, 34, 25]

求并集

// 并集
const s1 = new Set(arr1.concat(arr2))
const result = [...s1]
console.log('并集', result) //(11) [22, 1, 2, 5, 32, 78, 34, 25, 56, 11, 67]

 求交集

// 并集
const s2 = new Set(arr1) //去重
console.log('并集',[...s2].filter((el) => arr2.indexOf(el) >= 0)) 
//(5) [22, 2, 78, 34, 25]

求差集

// 差集
const result2 = [...new Set([...arr1, ...arr2])].filter(
    (el) => result.indexOf(el) < 0
)
console.log('差集', result2)//(6) [1, 5, 32, 56, 11, 67]

MAP

 map集合专门用于存储多个键值对数据

在map出现之前 我们使用的对象的方式来存储键值对,键是属性名,值是属性值

使用对象存储有以下问题:

  1. 键名只能是字符串
  2. 获取数据的数量不方便
  3. 键名容易跟原型上的名称冲突

map集合的创建

const s1 = new Map()
console.log(s1)

  • 1.set(键,值)方法

size:只读属性,获取当前map中键的数量

set(键,值):设置一个键值对,键和值可以是任何类型

如果键不存在,则添加一项

如果键存在,则修改他的值

比较键的方式和set相同

const mp1 = new Map([['a', 1], ['b', 2], ['c', 3]])
console.log(mp1)
mp1.set(3, 455)
console.log(mp1)
console.log(mp1.size)//4

  • 2.get(键)方法 

             根据一个键得到对应的值

  • 3.has(键):判断某个键是否存在

  • 4.delete(键):删除指定的键

  • 5.clear():清空map

mp1.delete('a')
console.log(mp1.has('a'))//false
mp1.get('a')//1
mp1.clear()

map与数组进行互换

和set一样

const mp1 = new Map([['a', 1], ['b', 2], ['c', 3]])
console.log([...mp1])

map遍历 

1.for of:每次遍历得到一个长度为2的数组

const mp1 = new Map([['a', 1], ['b', 2], ['c', 3]])
for (const iterator of mp1) {
    console.log(iterator)
}

其中:键取iterator [0]  值取iterator [1] 

2.foreach:通过回调函数遍历

  • 参数1 :每一项的值
  • 参数2:每一项的键
  • 参数3:map本身 
const mp1 = new Map([['a', 1], ['b', 2], ['c', 3]])
mp1.forEach((value, key, mp) => {
    console.log(value, key, mp)
})

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值