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

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

Map

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 作为构造函数,Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组

练习

let a = new Map([    ['name', 'leo'],    ['age', 18]])for (let i of a.keys()) {    console.log(i)};//name //agefor (let i of a.values()) {    console.log(i)};//leo //18for (let i of a.entries()) {    console.log(i)};//["name", "leo"]a.forEach((v, k, m) => {    console.log(`key:${k},value:${v},map:${m}`)})//key:name,value:leo,map:[object Map]//key:age,value:18,map:[object Map]复制代码
let a = new Map();let b = {name: 'leo' };a.set(b,'my name'); // 添加值a.get(b);           // 获取值a.size;      // 获取总数a.has(b);    // 查询是否存在a.delete(b); // 删除一个值a.clear();   // 清空所有成员 无返回const m = new Map();m.set('edition', 6)        // 键是字符串m.set(262, 'standard')     // 键是数值m.set(undefined, 'nah')    // 键是 undefined复制代码
const map = new Map([  [1, 'one'],  [2, 'two'],  [3, 'three'],]);[...map.keys()]// [1, 2, 3][...map.values()]// ['one', 'two', 'three'][...map.entries()]// [[1,'one'], [2, 'two'], [3, 'three']][...map]// [[1,'one'], [2, 'two'], [3, 'three']]复制代码
const map0 = new Map()  .set(1, 'a')  .set(2, 'b')  .set(3, 'c');const map1 = new Map(  [...map0].filter(([k, v]) => k < 3));// 产生 Map 结构 {1 => 'a', 2 => 'b'}const map2 = new Map(  [...map0].map(([k, v]) => [k * 2, '_' + v])    );// 产生 Map 结构 {2 => '_a', 4 => '_b', 6 => '_c'}复制代码
  1. Map 转为数组 前面已经提过,Map 转为数组最方便的方法,就是使用扩展运算符(...)。
const myMap = new Map()  .set(true, 7)  .set({foo: 3}, ['abc']);[...myMap]// [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]复制代码
  1. 数组 转为 Map 将数组传入 Map 构造函数,就可以转为 Map。
new Map([  [true, 7],  [{foo: 3}, ['abc']]])// Map {//   true => 7,//   Object {foo: 3} => ['abc']// }复制代码
  1. Map 转为对像 若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 }复制代码
  1. 对象转为 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})// Map {
"yes" => true, "no" => false}复制代码

keys():返回键名的遍历器。 values():返回键值的遍历器。 entries():返回所有成员的遍历器。 forEach():遍历 Map 的所有成员。

set

Set函数接受数组作为参数,是接受类似数组的对象作为参数。Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。

  • add(value):添加某个值,返回 Set 结构本身
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。
s.add(1).add(2).add(2);// 注意2被加入了两次s.size // 2s.has(1) // trues.has(2) // trues.has(3) // falses.delete(2);s.has(2) // false复制代码
let b = new Set([1, 2, 3, 3, 4]);  console.log(b);//Set(4) {1, 2, 3, 4}  console.log(...b);//将对象序列化 1 2 3 4  console.log([...b]);//(4) [1, 2, 3, 4]  //Array.from方法可以将 Set 结构转为数组。  const array = Array.from(b);  console.log(array);//(4) [1, 2, 3, 4]复制代码

这里需要注意,Set 结构的键名就是键值(两者是同一个值),因此第一个参数与第二个参数的值永远都是一样的。

for (let item of set.entries()) {  console.log(item);}//item [key,value]// ["red", "red"]// ["green", "green"]// ["blue", "blue"]let set = new Set([1, 4, 9]);  set.forEach((value, key) => console.log(key + ' : ' + value))// 1 : 1// 4 : 4// 9 : 9复制代码

参考:阮一峰ES6

转载于:https://juejin.im/post/5cc527d2e51d456e4f4d2a89

你可能感兴趣的文章
linux 系统调优步骤 例
查看>>
显式方法与隐式方法
查看>>
Android防火墙+流量统计代码
查看>>
通知中心
查看>>
马哥9-3
查看>>
我的友情链接
查看>>
MVC中的三个模块
查看>>
C#学习要点一
查看>>
需求分析
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
跟踪被锁的AD账号
查看>>
Python 学习笔记 - 递归和模块中的特殊变量
查看>>
redis 安装配置
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
运维工程师的职责和前景
查看>>
Gcc编译流程解析
查看>>
迈出第一步
查看>>
根据request获取请求路径
查看>>
mysql 并行复制
查看>>