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]