js默认的对象表达方式是{}可以视为其他语言中的 Map 和 Dictionary 的数据结构;即一组键值对key - value;(键值对)
js有个问题:对象表达方式{}中的键 key 必须是字符串,如下代码:
var names={1:”a”,2:”b”};
console.log(names.1)//Uncaught SyntaxError: missing ) after argument list
如上代码是报错的,所以number类型的是不能作为key来使用.在ES6中新增了Map功能,可以解决这个问题.
Map
Map的查询速度会比二维数组快,以下代码是二维数组:
var names=[1,2,3];
var scores=[95,89,78];
二维数组array越长,耗时越长;而Map简单快速:
var map=new Map([["a",95],["b",89],["c",78]]);
//Map的增删改查:
map.get("d",67);//改变成员value;
map.set("d",59);// 增加成员;
map.has("d");//确定是否有某个成员;
map.delete("d");//删除成员;
Set:
var s=new Set([1,2,3,3,3,3,”3”]);
s.add(4);//增加成员;
s.delete(4);//删除成员;
s.forEach(function(a){
alert(a+"/")
})//查看成员;
set去重
Set与Map类似,但是Set的创建可以需要一个数组的输入,而且只是key的集合,并不存储value;key的值不能重复,所以在Set中不会有重复的key.这个原理可以过滤数组中的重复项
项目实战
在项目中遇到将一个字符串转化为字符串添加为下拉选择中的项,eg,"201807312235,201807312236,201807312237..."这些数字是时间年月日时分的写法,需要获取后配合vue中的v-for循环为下拉框的项,但是指定的项目类型有很多种,eg:'oneProject,twoProject...',每个项目获取的项目时间都不一样,在循环项目与时间时,需要配对,这个时候可以用map解决,