美文网首页
ES6 Map数据结构

ES6 Map数据结构

作者: 萘小蒽 | 来源:发表于2019-06-28 11:20 被阅读0次

Map结构的目的和基本用法
js里面的对象(Object)本质上是键值对的集合(Hash结构),但是只能以字符串做为键。这给它带来很大的限制。

var data = {};
var element = document.getElementById('myDiv');
data[element] = 'metadata' 
data// {'[object HTMLDivElement]':'test'}

上面使用DOM节点作为对象data的健,因为对象只接受字符串为键,所以默认被转为了字符串(调用toString())。

为了解决这个问题,ES6提供了Map数据结构。

1.它类似于对象,也是键值对的集合,但是它的健不受类型的限制,各种类型的值都可以当做它的健。

  1. 对象结构是字符串和值的对应,而Map是值与值的对应,是一种更完善的Hash结构实现。
  • 对象作为健
var o = {p:'hello'};
var m = new Map();
m.set(o:'cotent')
m.get(o) //'cotent'
m.has(o)  //true
m.delete(o)// true ;
m.has(o)  //false
  • Map作为构造函数,它能接受数组作为参数,但是数组必成员必须是作为键值对的数组。
var m = new Map([['name','张三'],['title','author']])
m //Map(2) {"name" => "张三", "title" => "author"}
  • 如果是同一个键多次赋值,那和对象一样,后面的值将覆盖前面的。
var m = new Map([['name','张三'],['name','李四']])
m.get('name') // "李四"
m.set('name','王五')
m.get('name') // "王五"
  • 注意对象类型作为键的容易出现的错误,要区分引用类型。
var m = new Map();
m.set({name:'赵六'},'test');
m.get({name:'赵六'}); //undefined
//要区分唯一引用
var a = {name:'赵六'};
var b = {name:'赵六'};
m.set(a,'赵六,的媳妇');
m.set(b,'另一个赵六,的媳妇');
m.get(a)//'赵六,的媳妇'
m.get(b)//'另一个赵六,的媳妇'

map结构与数组以及对象之间的相互转换。

  • map与数组之间的转换。
var map = new Map().set([1,2,3],"数组键的值").set('name',"余佳").set(0,[ 4, 5, 6 ])
var mapToArr = [...map]
//[ [ [1, 2, 3], "数组键的值" ] , [ "name","余佳" ] , [ 0, [4, 5, 6] ] ]
var arrToMap = new Map(mapToArr)
arrToMap.has("name") //true
  • map与对象之间的转换。(仅限键为字符的map类型)
function strMapToObj (strMap){
   let obj= Object.create(null);
   for(let [k,v] of strMap){
     obj[k] = v; 
    }
    return  obj;
}
function objToStrMap (obj){
   var map = new Map();
   for(let key in obj){
      map.set(key,obj[key])
    }
     return  map
}
var person = {name:'余佳', age: 25 ,};
var personMap =  objToStrMap(person);
//Map(2) {"name" => "余佳", "age" => 25}
strMapToObj(personMap)
//{name: "余佳", age: 25}

总结

  1. Map类型弥补了对象对key的限制(字符串),它接受任何类型作为它的key
  2. Map 类型和 Set 类型有着同样的实例方法,set()、get()、delete()、has()、clear() 等方法以及 sizeconstructor属性。
  3. map提供三个遍历器函数keys()、values()、entries()和一个遍历方法forEach()
  4. map可以在数组、对象、JSON等数据类型之间相互转换。

相关文章

  • 帮大家理解ES6中的Map

    帮大家了解ES6中的map:Map 是 ES6 中新增的数据结构,Map 类似于对象,但普通对象的 key 必须是...

  • ES6中的Set和Map

    ES6中新增了Set、WeakSet、Map、WeakMap数据结构 一、Set Set是类似数组的数据结构,和数...

  • 简单总结ES6的Map

    ES6的Map Map结构提供了“值—值”的对应,如果需要键值对的数据结构,Map比Object更合适。它类似于对...

  • Set 和 Map 数据结构

    Set WeakSet Map WeakMap Set § ⇧ 基本用法 § ⇧ ES6 提供了新的数据结构 Se...

  • ES6 Map数据结构

    Map 集合 1. 概述: ES6 提供了 Map 数据结构。 它类似于对象,Map是一个升级版的对象,也是键值对...

  • ES6系列之Set和Map

    今天,我们来学习一下ES6中新增的两个数据结构:Set和Map。 Set ES6 提供了新的数据结构 Set。它类...

  • ES6快速入门(二)

    1. Map对象 ES6提供了新的数据结构Map,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现...

  • ES6中的Map和Set

    Map 一、Map是什么?es6 新提出的一种引用类型的数据结构 类似于对象。Map对象保存键值对。任何值(对象或...

  • JavaScript中的Array、Set和Map

    数组、Set和Map比较 都是JavaScript的数据结构 Set是ES6提供的新的数据结构, 类似于数组, 但...

  • Iterator和for...of循环

    Iterator(遍历器) 概念 表示"集合"的数据结构,主要是原有的Array和Object,ES6增加的Map...

网友评论

      本文标题:ES6 Map数据结构

      本文链接:https://www.haomeiwen.com/subject/jajdcctx.html