Set和Map类型

一、数组和对象的优缺点

1、数组

特点:数组是一个有序的列表,可以根据指定下标找到元素以及其上下关系的元素,是一种紧密结构,长度会随着添加和删除而改变。
作用主要存储相关类似的数据,便于遍历全部处理

缺点:插入、删除非常消耗性能,排序也非常消耗性能。元素没有宿主,本身是无关联的,数组的元素可以重复,查找速度很慢。

2、对象

特点:对象是一个无序的列表,以键值对形式存储,可以通过键找到值,查找速度非常快。
对象用来存储关联性数据,因为是无序的,所以插入和删除速度非常快。

缺点:key只能是字符串或者Symbol型,无法使用对象或者其他内容作为键;对象是没有长度的,无法确定对象是否遍历到最后一个,只能通过键名找到值,无法直接使用值找到键名,需要遍历查找才行。

二、 Set

1、Set是一个不能有重复元素的集合,是一个无序集合,没有下标。
为了使添加删除查找速度非常快,将数据以无序的方式存储,自带值去重。
有一个维护性的元素数量属性size

2、创建Set

var s=new Set();
var s=new Set(“abc”);
var s=new Set([1,2,3,4,5]);
var s=new Set([{a:1,b:2},{c:3,d:4}]);

3、Set中元素的增删改查

添加元素

s.add(1);
s.add(2);

删除元素

s.delete(2);

判断有没有某个元素

s.has(2)

清空所有元素

s.clear()

查看元素的数量

s.size

4、Set中的forEach方法遍历Set

var s=new Set([1,2,3,4,5]);
s.forEach(value=>{
console.log(value);
})

5、entries()

s.entries() 方法可以拿到Set的迭代器
迭代器有一个next方法,可以通过s.entries().next().value得到元素,s.entries().next().done为true时,表示迭代器运行完了。

console.log(s.entries().next());

三、WeakSet

WeakSet 弱引用Set

存在WeakSet中引用对象被设为null,垃圾回收车会自动从WeakSet中清除。

WeakSet不能遍历。

四、Map

1、Map 类型 针对Object做了优化,模仿HashMap
key可以是任何类型,有长度size属性

2、创建Map

var map=new Map();

3、Map中元素的增删改查

添加元素

map.set(“name”,“chen”)
var arr=[1,2,3];
map.set(arr,10);

删除元素,按照键名删除

map.delete(arr);

清空所有元素

map.clear()

通过key获取值

map.get(key)

判断map中是否有该成员

map.has(value)

获取map的成员数

map.size

4、遍历Map

遍历Map的key
map.keys() 获取键的迭代器

for(var key of map.keys()){
 console.log(key);
}

遍历Map的value
map.values() 获取值的迭代器

for(var value of map.values()){
 console.log(value)
}

遍历Map的key和value
map.entries() 获取map的迭代器

for(var [key,value] of map){
 console.log(key,value);
}

for(var [key,value] of map.entries()){
 console.log(key,value);
}

forEach方法完成遍历

map.forEach((value,key)=>{
 console.log(key,value);
})

五、WeakMap

弱引用Map,也不能遍历

var map=new WeakMap();
map.set(“name”,“xietian”);
var o={a:1};
var arr=[1];
map.set(o,arr);
o=null;
console.log(map);

六、迭代器 iterator

数组、Set、Map都具有迭代器,所有迭代器的序列都可以用for of遍历。

var s=new Set([1,2,3,4,5]);
for(var value of s){
console.log(value);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值