Set和Map
数组数据类型:
数组无名有值
根据下标记录数据 按照顺序记录
如果需要找到某个数据,必须遍历整个数组,查找数据 时间长
插入,删除,添加元素 因为数组是紧密结构 时间长
数组的元素可以重复,无法让元素唯一性
数组有关联关系,可以根据自身前后找到上下数据
数组可以知道当前遍历到什么地方了
对象数据类型:
key:value 键值对 必须有名有值
可以直接根据键名获取到值,不需要遍历 速度快
键名是唯一,如果有相同键名会覆盖,但是值仍然不是唯一
如果查找值 仍然需要遍历整个对象查找 时间长
插入,删除,添加元素,对象本身是一个松散型结构,因此插入等操作没有关联关系,速度非常快
因为松散结构,不具备上下数据
对象是没有长度,所以无法知道现在遍历到第几个,是不是最后一个,是不是开始
Set
1.Set是一个不能有重复元素的集合,重复添加无效
2.列表容器,没有下标,没有顺序,各数据之间没有关联
3.新建set:let a=new Set()
a.add(value)
添加元素
a.delete(value)
删除元素
a.has(value)
判断是否是成员,快速查找,不需要遍历
a.clear()
清除所有数据
4.数组去重
let arr=[1,2,3,1,2,3,1,2,3];
let sets=new Set(arr);
arr=Array.from(sets);
console.log(arr);
Array.from()方法从一个类似数组或可迭代对象中创建一个新的数组实例
5.遍历set
由于没有下标,所以for循环跟for in都不行,可以使用for of和forEach
for(let value of a){
console.log(value);
}
a.forEach(function(key,value,s){
console.log(key,value,a);
})
6.弱引用列表类型 只能添加对象类型数据
let b=new WeakSet();
Map
1.Map类型是有长度的键值对数据类型
2.新建Map:let b=new Map();
b.set(key,value)
添加元素
b.get(key)
获取元素,可以根据键查找属性值
b.size
获取map的成员数
b.has(value)
判断是否是成员,只能判断是否有键名,不能判断是否有这个值
b.clear()
清除所有数据
3.遍历
(1)遍历对象(map里所有元素):
for(let obj of b){
console.log(obj);
}
(2)遍历属性名:
for(let str of b.keys()){
console.log(str);
}
(3)遍历值:
for(let value of b.values()){
console.log(value);
}
(4)返回所有成员的遍历器:
for(let item of b.entries()){
console.log(item);
}
(5)forEach遍历map
b.forEach((v,k,list)=>{console.log(v,k,list)})
b.forEach(function(prop,value){
console.log(prop,value);
});
4.弱引用键值对类型
let b=new WeakMap();