typescript中的map数据存储

1. 其实在VSCode中并没有像Java那样的map数据类型存储,但是在typescript中的某些需求上却是对map依赖性很高,比如一个列表List,你要向删除这个列表中的某一项,有几种方式,其中一个就是通过索引去删除,但是效率并不高,毕竟内部要全部遍历完这个列表,找到对应的索引才能删除,还有另外一种方式就是通过map方式的存储,然后直接根据对应map中的key值进行删除,举个列子,我们可以定义这么一个map对象(定义一个map变量,其对应的key值是属于number类型,而value值是属于Student类型)

let map:{[key:number] : Student} = {};

let stu1:Student  = new Student();

let stu2:Student  = new Student();

let stu3:Student  = new Student();

map[1] = stu1;

map[2] = stu2;

map[3] = stu3;

我们分别存储了这个三个对象到map变量里面,其实就相当于 

map{

"1": stu1, 

"2": stu2, 

"3": stu3

}

当我们做删除操作的时候就方便多了,就可以根据对应的key值直接对删除操作,即

delete map[2]          -> 即将第二个数据给删除,此时map就变成了

map{

"1": stu1, 

"3": stu3

}

2. 有人问到为什么会要用map存储呢?而不用数组进行存储呢?我们来分析一下就知道了,假如用数组进行存储,即

let arr:Array<> =[];

arr.push(stu1);

arr.push(stu2);

arr.push(stu3);

假如我们要指定删除第二个数据即stu2,我们可以这样操作

arr.splice(arr.indexOf(stu2), 1);

但是往往我是不会指定给你删除的这个对象stu2,而是给你这个对象的id,即要你通过这个id删除掉对应的这个stu2对象,那可以这样处理(删除指定的targetId)

for(let key in arr){

    if(arr[key].id == targetId){

        arr.splice(key, 1);

    }

}

查看这个过程是不是感觉有点麻烦呢?其实在很多需求上,我们拿到的数据都是对象的id,而不会给你一个对象,比如一个学生列表中,通过点击删除其中一个学生的信息,客户端会把对应要删除的学生id发给服务器,服务器删除成功后会回调告知客户端删除该学生信息成功,这个时候服务器会返回该删除的学生id告知客户端要把对应该学生的缓存给删除掉,这个时候服务器不会把这个删除的学生对象发给客户端,而只会发一个对象id过来,所以此时我们要通过id去删除这个学生对象,而采用map方式存储学生信息就方便多了,直接根据对应的id就可以直接删除对应的缓存对象,即 delete map[targetId]

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值