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出现之前 我们使用的对象的方式来存储键值对,键是属性名,值是属性值
使用对象存储有以下问题:
- 键名只能是字符串
- 获取数据的数量不方便
- 键名容易跟原型上的名称冲突
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)
})