es6
es6,新的数据结构set
-
set集合,类似于数组,成员值是唯一的
- 1, 实现了iterator接口,可以使用扩展运算符和for…of 进行遍历
- 2,set 本质是对象
- 3,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”
- 4,Set结构不能接收重复数据的特点,(常常用来数组去重,同时利用es6的延展运算符)
size 返回集合的元素个数
add 增加一个新记录,返回当前集合
delete 删除,返回boolean值
has 检测集合中是否包含某个元素,返回boolean值
声明一个set对象
let s =new Set();//可接受可迭代数据,数组也行
let s2 =new Set([1,2,3,4,5]);
console.log(s2)//Set(5) {1, 2, 3, 4, 5},会自动去除数组括号
s2.add(6);
s2.delete(3);
//检测
console.log(s2.has(0))//false
//清空
s2.clear()
for (let v of s2){
console.log(v)
}
set 实践
数组去重
let arr =[1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]
let arr1 =[1,2,3,4,5,4,3,2,1]
//给数组添加set集合,使之可以操作set里面的方法
let arr0 = new Set(arr1)
console.log(arr0,"添加set")//类型为object
//去重,借助扩展运算符
let arr3= [...new Set(arr)]
console.log(arr3,"去重")
//求交集
let arr4=arr3.filter(item=>new Set(arr1).has(item))
console.log(arr4,"交集")
//求并集,先合并
let arr5=[...arr,...arr1]
// 再去重
let arr6=[...new Set(arr5)]
// 简单写法
let arr7=[...new Set([...arr,...arr1])]
console.log(arr6,arr7,"并集")
//差集
let arr8=[...new Set(arr)].filter(item=>!(new Set(arr1).has(item)))
console.log(arr8,"差集")
es6,新的数据结构Map
升级版的对象,以前的key只能是字符串,现在可以是对象
键值对的集合,但是,键的范围不限于字符串,各种类型的值,包括对象都可以当做键
默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”Map字典是以[键,值]的形式存储
size 返回Map的元素个数
add 增加一个新元素,返回当前Map
get 返回键名对象的键值
delete 删除,返回boolean值
has 检测Map中是否包含某个元素,返回boolean值
claear 清空集合,返回undefined
声明一个Map对象
//声明Map
let obj = new Map();
//添加记录
obj.set('键', "值")
obj.set('键1', "值1")
//键可以是对象
let keys = {
"对象": "对象值"
}
//值可以为数组
obj.set(keys, ['对象值1', '对象值2', '对象值3'])
console.log(obj)
//遍历,虽然obj为对象,但因为 Iterator 接口,所以是可遍历的
for (let i of obj) {
console.log(i)//打印的是数组
}
//删除
obj.delete('键1')
console.log(obj)
//获取
let obj1 = obj.get('键')
console.log(obj1) //值
//Map元素个数
let obj2 = obj.size
console.log(obj2)
//清空
obj.clear()
console.log(obj)