Map()--es6新增数据结构

1、实例属性和操作方法
1)size属性
  const map = new Map();
  map.set(‘foo‘, true);
  map.set(‘bar‘, false);
  console.log(map.size);
2)set(key, value)
3)get(key) 如果找不到key,返回undefined
4)has(key)
5)delete(key)
6)clear() 清除所有成员
2、遍历方法
-keys():返回键名的遍历器。
-values():返回键值的遍历器。
-entries():返回所有成员的遍历器。
-forEach():遍历Map的所有成员。
注意:Map的遍历顺序就是插入顺序
  const map = new Map([
    [‘F‘, ‘no‘],
    [‘T‘, ‘yes‘],
  ])
  for(let key of map.keys()) {
    console.log(key);
  }

  for(let value of map.values()) {
    console.log(value);
  }

  for(let item of map.entries()) {
    console.log(item);
  }

  for(let [key, value] of map) {
    console.log([key, value]);
  }
Map()结构转换为数组 用扩展运算符
  const map1 = new Map([
    [1, ‘one‘],
    [2, ‘two‘],
    [3, ‘three‘]
  ]);
  console.log([...map1.keys()]);
  console.log([...map1.values()]);
  console.log([...map1.entries()]);
  console.log([...map1]);

结合数组的map方法、filter方法,可以实现 Map 的遍历和过滤(Map 本身没有map和filter方法)

  const map0 = new Map()
    .set(1, ‘a‘)
    .set(2, ‘b‘)
    .set(3, ‘c‘);
  const map4 = new Map(
    [...map0].filter(([k, v]) => k < 3)
  )
  console.log([...map4]);

  const map5 = new Map(
    [...map0].map(([k, v]) => [k * 2, ‘_‘ + v]
  )
  console.log([...map5]);

  map0.forEach(function(value, key, map) {
    console.log("key: %s, Value: %s", key, value);
  })
  const reporter = {
    report: function(key, value) {
      console.log("Key: %s, Value: %s", key, value);
    }
  }
  map.forEach(function(value, key, map){
    this.report(key, value);
  }, reporter) ;

3、与其他数据的互相转换
1)Map转化为数组
  const myMap = new Map()
    .set(true, 7)
    .set({foo: 3}, [‘abc‘]);
  console.log([...myMap]);
2)数组转化为Map
  new Map([
    [true, 7],
    [{foo: 3}, [‘abc‘]]
  ])
3)Map转化为对象
  function strMapToObj(strMap) {
    let obj = Object.create(null);
    for(let [k, v] of strMap) {
      obj[k] = v;
    }
    return obj;
  }
  const myMap1 = new Map()
    .set(‘yes‘, true)
    .set(‘no‘, false);
  console.log(strMapToObj(myMap1))
4)对象转化为Map
  function objToStrMap(obj) {
    let strMap = new Map();
    for(let k of Object.keys(obj)) {
      strMap.set(k, obj[k]);
    };
    return strMap;
  }
  console.log(objToStrMap({yes: true, no: false}))
5)map转化为JSON
Map 转为 JSON 要区分两种情况。一种情况是,Map
的键名都是字符串,这时可以选择转为对象 JSON。
  function strMapToJson(strMap) {
    return JSON.stringify(strMapToObj(strMap));
  }
  let myMap2 = new Map().set(‘yes‘, true).set(‘no‘, false);
  console.log(strMapToJson(myMap2));
另一种情况是,Map 的键名有非字符串,这时可以选择转为数组 JSON。
  function mapToArrayJson(map) {
    return JSON.stringify([...map]);
  }
  let myMap3 = new Map().set(true, 7).set({foo: 3}, [‘abc‘]);
  console.log(mapToArrayJson(myMap3))
6)JSON转化为Map
JSON 转为 Map,正常情况下,所有键名都是字符串。
  function jsonToStrMap(jsonStr) {
    return objToStrMap(JSON.parse(jsonStr));
  }
  console.log(jsonToStrMap(‘{"yes": true, "no": false}‘));
但是,有一种特殊情况,整个 JSON 就是一个数组,且每个数组成员本身,又是一个有两个成员的数组。这时,它可以一一对应地转为 Map。这往往是 Map 转为数组 JSON 的逆操作。
  function jsonToMap(jsonStr) {
    return new Map(JSON.parse(jsonStr));
  }
  console.log(jsonToMap(‘[[true,7],[{"foo":3},["abc"]]]‘))

原文地址:https://www.cnblogs.com/insignificant-malt/p/8556414.html

时间: 2024-10-06 19:13:20

Map()--es6新增数据结构的相关文章

ES6新增数据结构Map的用法

Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是”字符串-值“对,属性只能是字符串,如果传个对象字面量作为属性名,那么会默认把对象转换成字符串,结果这个属性名就变成”[object Object]“. ES6提供了”值-值“对的数据结构,键名不仅可以是字符串,也可以是对象.它是一个更完善的Hash结构. 特性 1.键值对,键可以是对象. const map1 = new Map() const objkey = {p1: 'v1'} map1.set(objk

ES6新增数据结构WeakSet的用法

WeakSet和Set类似,同样是元素不重复的集合,它们的区别是WeakSet内的元素必须是对象,不能是其它类型. 特性: 1.元素必须是对象. 添加一个number类型的元素. const ws = new WeakSet() ws.add(1) 结果是报类型错误. TypeError: Invalid value used in weak set 添加一个对象. const ws = new WeakSet() var a = {p1:'1', p2:'2'} ws.add(a) conso

Map 和 WeakMap 数据结构

Map 和 WeakMap 是ES6 新增的数据结构 一.Map 它们本质与对象一样,都是键值对的集合,但是他们与 Object 对象主要的不同是,键可以是各种类型的数值,而Object 对象的键 只能是字符串类型或者Symbol类型值,Map 和 WeakMap 是更为完善的Hash结构. 1.对象 和 Map //----------- 对象 -------------- var keyObj = {} var dataObj = {} dataObj[keyObj] = '大家好' 虽然表

es6新增的数组方法和对象

es6新增的遍历数组的方法,后面都会用这个方法来遍历数组,或者对象,还有set,map let arr=[1,2,3,4,3,2,1,2]; 遍历数组最简洁直接的方法法 for (let value of arr) { console.log(value);//输出1,2,3,4,3,2,1,2 } 1. 数组.map() 返回一个新的数组,es5要复制一个新的数组我们一般用循环,现在直接用map let arr=[1,2,3,4,3,2,1,2]; let newArr=arr.map((va

ES6新增的 Set 和 WeakSet

什么是Set结构 Set是ES6给开发者带来的一种新的数据结构,你可以理解为值的集合.我们平时见到的数组Array也是一种数据结构,但是Set跟其他数据结构不同的地方就在于:它的值不会有重复项. 基本用法 我们从最基本的学起,Set的用法: 1 var s = new Set(); 2 console.log(s); 3 //打印结果:Set {} Set本身是一个构造函数,你可以理解为一个类,使用的时候需要用new来创建一个实例.以上的案例就是这样创建出一个Set结构,我们打印出来看看,控制台

【ES6新增语法详述】 &#210864;

目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 原文: http://blog.gqylpy.com/gqy/275 "@ ES6新增了关于变量的定义,函数扩展,数据结构,类,模块等概念,本文将详细介绍常用的ES6语法. *** 1. 变量的定义 let ES6中新增了let语法,用来声明变量,用法类似var. ==let定义的变量只在当前代码块内有效.== 如下示例: <

ES6新增—新增循环、箭头函数

5.新增循环: 以前for循环,for in循环 ES6新增循环: for of 循环:遍历(迭代,循环)整个对象,变现类似于for in 循环 两者的区别: for in循环:既可以循环数组,又可以循环json 循环数组:i代表数组的索引 var arr1=['apple','banana','appel','orange']; for(var i in arr1){ console.log(i); //0,1,2,3 } 循环json:name代表json的索引 var json=[a:'a

ES6新增的math,Number方法

ES6新增的math,Number方法,下面总结了一些我觉得有用的 Nunber.isInteger()判断是否为整数,需要注意的是1,和1.0都会被认为是整数 console.log(Number.isInteger(1.0))//true console.log(Number.isInteger(1))//true console.log(Number.isInteger("1"))//false console.log(Number.isInteger("1.1&quo

ECMAScript简介以及es6新增语法

ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的规格,后者是前者的实现.但通常两者是可互换的.) ESMAScript的历史 1996年11月,Netscape公司将Js提交给国际化标准组织ECMA,当初该语言能够成为国际化标准. 1997年,ECMAScript 1.0版本推出.(在这年,ECMA发布262号标准文件(ECMA-262)的第一版