A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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]
---------------------
作者:qq_38267019
来源:CSDN
原文:https://blog.csdn.net/qq_38267019/article/details/80751824
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马