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. [蓝桥杯]ALGO-87.算法训练_字串统计

    问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的. 输入格式 第一行一个 ...

  2. ALGO-31_蓝桥杯_算法训练_开心的金明(DP)

    问题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎 么布置,你说了算,只要不超过N元钱就行”.今 ...

  3. 【nginx】之proxy_pass

    在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径:如果没有/,表示相对路径,把匹配的路径部分也给代理走.     假设下面四种情况分别用 h ...

  4. 查看app日志的方法

    可以打开SDk里面的 ddms.bat 查看日志 路径: android-sdk-macosx/tools/ddms SDK下载的地址: http://www.androiddevtools.cn/ ...

  5. Zabbix 课程大纲

    Zabbix 课程笔记  day1 Zabbix 安装  day1 Zabbix 添加主机 day1 Zabbix 创建监控项目 day1 Zabbix 创建触发器 day1 Zabbix 告警内容配 ...

  6. json--处理框架

    1.Android 中的Json解析工具fastjson .序列化.反序列化 2.Android Gson的使用总结 可以处理含有内部类的类,或包含集合内部类的类: 3.Android-JSONToo ...

  7. ArcGIS for android访问天地图

    底图采用Web Mercator投影坐标系 获取元数据信息:http://t0.tianditu.com/img_w/wmts?SERVICE=WMTS&REQUEST=GetCapabili ...

  8. echart-map

    1.非模块下引入地图: echarts.util.mapData.params.params.HK={ getGeoJson:function(callback){ $.getJSON('geoJso ...

  9. vue实现点击、滑动右侧字母对应各个城市

    1.字母组件给父组件传递当前点击的字母值 @click="handleLetterClick" //绑定事件 handleLetterClick (e) { //向上传递参数 th ...

  10. MySQL通过游标来实现通过查询结果集循环

    /*我们有时候会遇到需要对 从A表查询的结果集S_S 的记录 进行遍历并做一些操作(如插入),且这些操作需要的数据或许部分来自S_S集合*/ /*临时存储过程,没办法,不能直接在查询窗口做这些事.*/ ...