博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Set和Map数据
阅读量:5791 次
发布时间:2019-06-18

本文共 3048 字,大约阅读时间需要 10 分钟。

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];....//forEachset.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}//Mapconst map=new Map(); map.set(NaN,123); map.get(NaN);//123 //undefined和null不相等map.set(obj,2);//key:{name: "joe", say: ƒ};value:2map.get(obj);//2map.has(obj);/truemap.delete(obj);//truemap.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)//会把键和值放在一个数组里}//forEachmap.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']]]
//数组转Mapconst 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 }//对象转为Mapfunction 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})

 

转载于:https://www.cnblogs.com/shui1993/p/9266451.html

你可能感兴趣的文章
List<T> to DataTable
查看>>
[Java]Socket和ServerSocket学习笔记
查看>>
stupid soso spider
查看>>
svn命令在linux下的使用
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>
人生第一个过万 Star 的 GitHub 项目诞生
查看>>
Mac下配置多个SSH-Key (gitLab)
查看>>
Gradle之module间依赖版本同步
查看>>
一些kindle资源
查看>>
页面搭建工具总结及扩展架构思考
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
SpringCloud使用Prometheus监控(基于Eureka)
查看>>
10g手动创建数据库
查看>>
Linux—文件系统
查看>>
运用Loadrunner测试Mysql数据库性能
查看>>
Spring MVC EL表达式不能显示
查看>>
【致青春】我们挥霍时间的年代
查看>>
WDS系列之四:自定义安装映像
查看>>
CentOS7 NTP server + keepalived
查看>>
jQuery 表单应用:全选/取消全选,表单验证,网页选项卡切换
查看>>