Set和Map数据
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数据的更多相关文章
- JSP的C标签遍历Map数据
JSP的C标签遍历Map数据 Map可以实现较为丰富的数据封装. 第一种: 控制器传递到页面的map格式如下: Map<String, User> dataMap = new HashMa ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_06-freemarker基础-遍历map数据
大的map里面有一些小的map 遍历数据模型里面的stuMap <br/> 遍历数据模型中的stuMap(map)数据 <br/> 姓名:${stuMap['stu1'].na ...
- 详解javaweb中jstl如何循环List中的Map数据_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List<Map& ...
- 数据库获取map数据后转化成json格式的数据
一,从数据库查出来的数据 两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片 ...
- MyBatis返回map数据
(1)接口中编写方法 //单行 public Map<String, Object> getEmpReturnMap(Integer id); //多行 @MapKey("id& ...
- tomcat cluster session同步时保存map数据遇到的问题
Tomcat Cluster官网:https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html(tomcat7.0) 场景: tomcat1 ...
- map数据的分组,list数据排序 数据筛选
sfit0144 (李四) 2015-01-10 18:00:251Sfit0734 (Sfit0734) 2015-01-10 18:00:38go homesfit0144 (李四) 2015-0 ...
- Intent 传递Map数据
android开发默认情况下,通过Bundle bundle=new Bundle();传递值是不能直接传递map对象的,解决办法: 第一步:封装自己的map,实现序列化即可 /** *序列化map供 ...
- map数据按照list排序
简介 (Introduction): 背景 需要对字段进行排序,但是,一个字段的结果存在一个map中,一个存在list中,需要让map的数组,按照list的顺序进行排序 结构图 list顺序 [ { ...
- js验证后台传递的map数据是否为空
if(JSON.stringify(data)=='{}'){ $("#year").append("<option>--请选择--</option&g ...
随机推荐
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值---部分内容可能不确切,待讨论
1.阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值 ...
- 学习笔记之Data Visualization
Data visualization - Wikipedia https://en.wikipedia.org/wiki/Data_visualization Data visualization o ...
- android-sdk和api版本
Platform Version API Level VERSION_CODE Notes Android 8.1 27 O_MR1 平台亮点Android 8.0 26 O 平台亮点An ...
- [UE4]InterpToMovement
InterpToMovement:可以让Actor在规定时间内,在多个点之间循环移动. Duration:规定时间
- IDEA配置打可运行jar包
IDEA打包可以运行的jar包大体有两种方式:一种是比较方便的配置maven:一种是直接配置IDEA采用Build Artifacts打包. 配置maven打包,在pom.xml里面配置build插件 ...
- 在linux下,去除^M,将windows格式文件(dos文件)改为unix格式文件
在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n'就显示成^M+' ...
- tp3.2sql改变时间格式
tp3.2sql改变时间格式2018-05-10取05-10 $listIn=D('api_article as a')->field('date_format( fabutime,\'%m-% ...
- lufen登录注册
创建精写报错信息表用于记录错误信息(新的文件夹,创建新的py) #静写报错信息class BaseResponse(object): def __init__(self): self.code=100 ...
- Linux常用操作分享
Java开发经常遇到的linux相关操作 1.常用的上传下载(Xshell5) 1).get 从远程服务器上下载一个文件存放到本地,如下: 先通过lcd切换到本地那个目录下,然后通过get file ...
- 爬取猫眼电影TOP100
本文所讲的爬虫项目实战属于基础.入门级别,使用的是Python3.5实现的. 本项目基本目标:在猫眼电影中把top100的电影名,排名,海报,主演,上映时间,评分等爬取下来 爬虫原理和步骤 爬虫,就是 ...