es6新的数据结构

1.Set:构造函数

const s = new Set ([1,2,3]);
console.log(s)//Set(3){1,2,3};
[...s];//[1,2,3]
console.log(s);//Set(3){1,2,3};
s.add(4);//Set(4){1,2,3,4};
s.size;//4;
s.has(1);//true
s.delete(2);
s.clear();//Set(0){}

用于数组去重

let arr=[1,2,1];
arr = [...Set(arr)]//[1,2]
//Set里NaN与NaN相等
let set = new Set();
set.add(NaN);
set.add(NaN);
set.size//1

Set遍历操作

keys():返回键名的遍历器

values():返回键值的遍历器

entries():返回键值对的遍历器

forEach():使用回调函数遍历成员

//keys():
let set = new Set([11,2,3,4]);
for(let item of set.keys()){
console.log(item)
}
//11,2,3,4
//values():
for (let val of set.values()){
console.log(val)
}
//11,2,3,4
//entries():
for (let item of set.entries()){
console.log(item)
}
//[11,11];[2,2];....
//forEach
set.forEach((val)=>{console.log(val)})

还可以使用for... of

for (let val of set){
console.log(val)
}

Map:可以使用非字符串作为键

//对象只允许使用字符串作为键;否则
var obj={a:1,b:2};
var ar={};
ar[obj]=2;
console.log(ar);//{[object Object]: 2}
//Map
const map=new Map();
map.set(NaN,123);
map.get(NaN);//123
//undefined和null不相等
map.set(obj,2);//key:{name: "joe", say: ƒ};value:2
map.get(obj);//
map.has(obj);/true
map.delete(obj);//true
map.delete(ofo);//报错
map.delete(ar);//false
map.clear();
map.size//0
//数组生成新的map
const mvp = new Map(['name','joe'],['title','silence']);
mvp.size;//2
mvp.has('name')//true
mvp.get('name')//joe
//Set和Map生成新的Map
const set = new Set([['foo',1],['bar',2]]);
const m1 = new Map(set);
m1.get('foo')//1

遍历方法

const map = new Map ([['name','joe'],['say','hello']]);
//keys()
for (let key of map.keys()){
console.log(key)//name;say
}
//values()
//entries()
for (let item of map.entries()){
console.log(item)//会把键和值放在一个数组里
}
//forEach
map.forEach()

Map转为数组结构

const map=new Map([
[1,'0ne'],
[2,'two'],
[3,three]
])
[...map.keys]
[...map.values]
[...map.entries]
[...map)

Map和数组方法

const map0 = new Map()
.set(1,'a')
.set(2,'b')
.set(3,'c');
const map1=map0.filter(([key,value])=>{
return key>2
})
类比使用数组map方法
const map=new Map([['e1','a'],['e2','b']])
map.forEach(function(value, key, map) {
console.log("Key: %s, Value: %s", key, value);
});//Key: e1, Value: a;Key: e2, Value: b

forEach接收第二个参数用来绑定this

const reporter={
report:function(key,value){
console.log("Key:%s,Value:%s",key,value);
}
}
const map=new Map([['e1','a'],['e2','b']]);
map.forEach(function(value,key,map){
this.report(key,value)
},reporter)
//声明一个对象reporter里面包含着对map遍历的变量的处理,在对map进行forEach遍历的时候,传入第二个变量即reporter,可以在forEach函数中使用this.reporter对其中的变+量进行处理

Map转换

//Map转为数组
const map= new Map()
.set('e1',2)
.set({foo:3},['abc']);
[...myMap]//[['e1',2],[{foo:3},['abc']]]
//数组转Map
const map=new Map([[1,2],[2,3]])
//Map转为对象
function strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k,v] of strMap) {
obj[k] = v;
}
return obj;
} const myMap = new Map()
.set('yes', true)
.set('no', false);
strMapToObj(myMap)
// { yes: true, no: false }
//对象转为Map
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
} objToStrMap({yes: true, no: false})

Set和Map数据的更多相关文章

  1. JSP的C标签遍历Map数据

    JSP的C标签遍历Map数据 Map可以实现较为丰富的数据封装. 第一种: 控制器传递到页面的map格式如下: Map<String, User> dataMap = new HashMa ...

  2. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_06-freemarker基础-遍历map数据

    大的map里面有一些小的map 遍历数据模型里面的stuMap <br/> 遍历数据模型中的stuMap(map)数据 <br/> 姓名:${stuMap['stu1'].na ...

  3. 详解javaweb中jstl如何循环List中的Map数据_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List<Map& ...

  4. 数据库获取map数据后转化成json格式的数据

    一,从数据库查出来的数据 两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片 ...

  5. MyBatis返回map数据

    (1)接口中编写方法 //单行 public Map<String, Object> getEmpReturnMap(Integer id); //多行 @MapKey("id& ...

  6. tomcat cluster session同步时保存map数据遇到的问题

    Tomcat Cluster官网:https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html(tomcat7.0) 场景: tomcat1 ...

  7. map数据的分组,list数据排序 数据筛选

    sfit0144 (李四) 2015-01-10 18:00:251Sfit0734 (Sfit0734) 2015-01-10 18:00:38go homesfit0144 (李四) 2015-0 ...

  8. Intent 传递Map数据

    android开发默认情况下,通过Bundle bundle=new Bundle();传递值是不能直接传递map对象的,解决办法: 第一步:封装自己的map,实现序列化即可 /** *序列化map供 ...

  9. map数据按照list排序

    简介 (Introduction): 背景 需要对字段进行排序,但是,一个字段的结果存在一个map中,一个存在list中,需要让map的数组,按照list的顺序进行排序 结构图 list顺序 [ { ...

  10. js验证后台传递的map数据是否为空

    if(JSON.stringify(data)=='{}'){ $("#year").append("<option>--请选择--</option&g ...

随机推荐

  1. 【ActiveMQ】之安全机制(二)客户端连接安全

    配置完管控台的安全之后,我们还要配置客户端连接安全,否则大家都可以往MQ上发送消息,这样太危险! 根据官方文档,http://activemq.apache.org/security.html Act ...

  2. Hadoop 管理工具HUE配置-hdfs_clusters配置

    在HUE的hdfs_clusters中目前主要是配置hdfs相关的,配置好了之后便可以在hue中愉快的管理数据了,不过目前的配置还是比较...简单的..    里面的配置主要是参考了hue官方文档,还 ...

  3. appium 启动了2个端口,但是只有一台机器在跑的 问题解决 (还没试,记录在此)

    appium启动了2个,端口分别设置为了4723 4725, 在测试类中也分别指定了设备和端口,用device来指定.然而每次都是运行一个设备. 后来添加了udid这个来指定才发现可以.deviceN ...

  4. js 取一个对象的长度,取出来的是undefined,自己写的一个计算长度的函数解决了。

    收藏 牙膏儿 发表于 3年前 阅读 13085 收藏 7 点赞 1 评论 1 [粉丝福利]-<web 前端基础到实战系列课程>免费在线直播教学>>>   昨晚写一段代码, ...

  5. hadoop本地运行模式调试

    一:简介 最近学习hadoop本地运行模式,在运行期间遇到一些问题,记录下来备用:以运行hadoop下wordcount为例子. hadoop程序是在集群运行还是在本地运行取决于下面两个参数的设置,第 ...

  6. tf.nn.embedding_lookup

    tf.nn.embedding_lookup(params, ids, partition_strategy=’mod’, name=None, validate_indices=True, max_ ...

  7. Find the peace with yourself

    The purpose of being mature is to find the real calm and peace with yourself. Or you can say the tur ...

  8. 迭代器&可迭代对象

    迭代器 能够被next调用, 并不断返回值的一个对象惰性排序, 一次只获取一个数据, (占用一个空间)迭代器可以遍历无限量的数据 特点: 1.惰性序列, 节省内存 2.遍历使用next, 方向不可逆 ...

  9. tomcat8+memcached session共享

    一.环境准备 时间同步(同步后确认各服务器时间是否一致,不一致需要修改一下时区) 关闭防火墙 软件包和jar包链接:https://pan.baidu.com/s/1sl9Nob7 二.安装配置ngi ...

  10. 关于AJAX与form表单提交数据的格式

    一 form表单传输文件的格式: 只有三种: multipart/form-data 一般用于传输文件,图片文件或者其他的. 那么其中我们默认的是application/x-www-form-urle ...