ECMAScript6中Map映射的基本概念与常用方法

目录
  • 什么是映射
  • Object与Map区别
  • Map映射常用方法
    • 声明并初始化
    • 赋值set
    • 获取键值get
    • 删除键值delete
    • 判断键值是否存在 has
    • 获取所有键值 values()
    • key/value 迭代器 entries()
    • 遍历所有键值 forEach(callback)
    • 清空Map映射所有键值 clear()
  • 与其它数据结构的转换
    • Map映射转为数组
    • Map映射转为对象
    • 数组转为Map映射
    • 对象转为Map
    • 映射Map转为JSON
  • 总结

映射(Map)是 ECMAScript 6 规范中引入的一种数据结构。这是一种存储键值对列表很方便的方法,类似于其他编程语言中的词典或者哈希表。

什么是映射

Javascript 的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键,这给使用带来了很大的限制。为了解决这个问题,ECMAScript 6 引入了 Map 数据结构。它类似于对象,也是键值对的集合,但是"键"的范围不仅仅局限于字符串,而是各种类型的值(包括对象)都可以当作键。也就是说,Object 结构(对象结构)提供了"字符串—值"的对应,而 Map 结构提供了"值—值"的对应,是一种更完善的 Hash 结构的实现。

下面来看一个简单的示例,了解Map的基本用法:

// 声明map实例
const page_info = new Map()
// 向 map 中添加元素
page_info.set("seo", {
    "keywords": "devpoint、Map",
    "description":"Map对象是一种简单的键/值映射,其中的键和值可以是任意值(原始值或对象的值)"
})
page_info.set("title", "javascript es6的map映射")
console.log(page_info)
console.log(typeof page_info) // object

输出结果为:

Map {
  'seo' => {
    keywords: 'devpoint、Map',
    description: 'Map对象是一种简单的键/值映射,其中的键和值可以是任意值(原始值或对象的值)'
  },
  'title' => 'javascript es6的map映射'
}
object

从输出结果看,本质上 Map(映射)就是一个object对象。

Object与Map区别

Object和Map的相似之处在于,都是按键存取一个值,而且键都是可以删除的。可以看出,二者之间是非常相似的,它的不同这之处在于:

Map映射常用方法

常用的 Map 方法有:赋值set(key, value) 、获取get(key) 、移除指定键名及其对应的值delete(key) 、判断是否存在has(key) 、 获取所有值values() 、key/value迭代器entries()、遍历forEach()和清空所有键/值对clear()  等。

声明并初始化

const new_map = new Map();
console.log(new_map);   //输出:Map {}

赋值set

赋值使用map.set(key,value),可以用于增加新的键/值对或者修改键/值对,返回整个Map对象。

const page_info = new Map()
// 设置值
page_info.set("seo", {
    "keywords": "devpoint、Map",
    "description":"Map对象是一种简单的键/值映射,其中的键和值可以是任意值(原始值或对象的值)"
});
console.log(page_info);
page_info.set("seo", "seo信息");
console.log(page_info);

上面的示例增加值,并修改值。

Map {
  'seo' => {
    keywords: 'devpoint、Map',
    description: 'Map对象是一种简单的键/值映射,其中的键和值可以是任意值(原始值或对象的值)'
  }
}
Map { 'seo' => 'seo信息' }

获取键值get

使用 get(key) 获取键值,如果获取的 key->value 不存则返回 undefined

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
const title = page_info.get("title");
const seo_info = page_info.get("seo");
console.log(title);      //javascript es6的map映射
console.log(seo_info);   //undefined

删除键值delete

map.delete(key) 删除指定 key 的键值对,返回成功或失败结果,删除成功返回true,删除失败返回false。

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
console.log(page_info);         // Map { 'title' => 'javascript es6的map映射', 'author' => 'devpoint' }

const deleted_author = page_info.delete("author");
const deleted_seo = page_info.delete("seo");
console.log(deleted_author);   // true
console.log(deleted_seo);      // false
console.log(page_info);        // Map { 'title' => 'javascript es6的map映射' }

判断键值是否存在 has

使用map.has(key)判断指定key是否存在。

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
console.log(page_info);         // Map { 'title' => 'javascript es6的map映射' }

console.log(page_info.has("title"));   // true
console.log(page_info.has("seo"));     // false

获取所有键值 values()

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
console.log(page_info.values());       // [Map Iterator] { 'javascript es6的map映射', 'devpoint' }

key/value 迭代器 entries()

使用map.entries()返回一个包含Map对象中每一个[key, value]数组的Iterator迭代器。

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
console.log(page_info.entries());

输出的结果为:

[Map Entries] {
  [ 'title', 'javascript es6的map映射' ],
  [ 'author', 'devpoint' ]
}

遍历所有键值 forEach(callback)

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
page_info.forEach((value,key)=>{
    console.log(key,value);
});

输出的结果为:

title javascript es6的map映射
author devpoint

清空Map映射所有键值 clear()

使用 map.clear() 清空Map所有的键值对。

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
page_info.clear();
console.log(page_info);  // Map {}

与其它数据结构的转换

Map映射转为数组

Map转为数组最方便方法是使用扩展运算符...

const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
console.log([...page_info]);  // [ [ 'title', 'javascript es6的map映射' ], [ 'author', 'devpoint' ] ]

Map映射转为对象

function mapToObj(map) {
    const obj = Object.create(null);
    map.forEach((v,k)=>{
        obj[k] = v;
    });
    return obj;
}
const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");

console.log( mapToObj(page_info));

输出结果为:

[Object: null prototype] {
  title: 'javascript es6的map映射',
  author: 'devpoint'
}

数组转为Map映射

将数组传入 Map 构造函数即可,即 new Map(array)。

const page_info = [
    ["title","javascript es6的map映射"],
    ["author","devpoint"]
];
console.log(new Map(page_info)); // Map { 'title' => 'javascript es6的map映射', 'author' => 'devpoint' }

对象转为Map

对象转为Map映射通过 Object.entries()。

const page_info = {
    title:"javascript es6的map映射",
    author:"devpoint"
};
console.log(new Map(Object.entries(page_info)));  // Map { 'title' => 'javascript es6的map映射', 'author' => 'devpoint' }

映射Map转为JSON

Map 转为 JSON ,步骤是先把Map转为对象,即前面的mapToObj,然后使用JSON.stringify方法

function mapToObj(map) {
    const obj = Object.create(null);
    map.forEach((v,k)=>{
        obj[k] = v;
    });
    return obj;
}
function mapToJson(map){
    return JSON.stringify(mapToObj(map));
}
const page_info = new Map();
page_info.set("title", "javascript es6的map映射");
page_info.set("author", "devpoint");
console.log( mapToJson(page_info));   // {"title":"javascript es6的map映射","author":"devpoint"}

总结

到此这篇关于ECMAScript6中Map映射的基本概念与常用方法的文章就介绍到这了,更多相关ECMAScript6中Map映射内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解JavaScript中Hash Map映射结构的实现

    Hash Map通常在JavaScript中作为一个简单的来存储键值对的地方.然而,Object并不是一个真正的哈希映射,如果使用不当可能会带来潜在的问题.而且JavaScript可能不提供本地哈希映射(至少不是跨浏览器兼容的),有一个更好的声明对象属性的方法. Hash Map的简单实现: var hashMap = { Set : function(key,value){this[key] = value}, Get : function(key){return this[key]}, Co

  • ECMAScript6中Map映射的基本概念与常用方法

    目录 什么是映射 Object与Map区别 Map映射常用方法 声明并初始化 赋值set 获取键值get 删除键值delete 判断键值是否存在 has 获取所有键值 values() key/value 迭代器 entries() 遍历所有键值 forEach(callback) 清空Map映射所有键值 clear() 与其它数据结构的转换 Map映射转为数组 Map映射转为对象 数组转为Map映射 对象转为Map 映射Map转为JSON 总结 映射(Map)是 ECMAScript 6 规范

  • ECMAScript6中Map/WeakMap详解

    JS的对象本身就是个键值结构,ES6为什么还需要加Map呢,它与普通的JS对象有何区别? 一.Map 1. Map构造器 先看Map的简单用法 // 字符串作为key, 和JS对象类似 var map = new Map() // set map.set('name', 'John') map.set('age', 29) // get map.get('name') // John map.get('age') // 29 这么对代码,看起来确实没有JS对象简洁 但Map的强大之处在于它的ke

  • Erlang中的映射组Map详细介绍

    主要是遇到 Map匹配的问题,所以顺便回忆一下 Erlang 中的映射组 Map,在其它语言中被称作 Hash 哈希或者 Dict 字典. Erlang 从 R17 版本开始支持映射组 创建映射组 Erlang 中的映射组用结构 #{} 表示,创建一个映射组可以这样 复制代码 代码如下: % 不管你怎么排序,最终结果都是按键的字典顺序排列的 #{ name => "wittyfox", age => 19 }. % => #{age => 20,name =&g

  • 详解Java的Hibernat框架中的Map映射与SortedMap映射

    Map映射 Map映射是一个java集合存储在键 - 值对的元素,并且不允许在列表中重复的元素. Map接口提供三种collection视图,允许Map内容看作是一组键-值集合,或者设置键 - 值映射关系. Map被映射到映射表中一个<map>元素和无序的地图可以在java.util.HashMap中被初始化. 定义RDBMS表: 考虑一个情况,我们需要员工记录存储在EMPLOYEE表,将有以下结构: create table EMPLOYEE ( id INT NOT NULL auto_i

  • Java中具有映射关系的容器:数组和Map的区别说明

    映射就意味着有两部分: 存储映射关系的容器是数组和Map集合: 区别: (1)当映射关系中的一方是有序编号时,这个时候要想到数组这种结构: (2)Map不一定需要有序编号,它只能建立对象之间的关系: (3)如果映射的两方没有任何一方是有序的编号,就不能想数组了,这时应该用集合中具备映射关系的容器Map. 注意: (1)Map中键相同时,键值会被覆盖: (2)Map中一个Key可以对应一个集合,因为集合也是一个对象,集合也能往集合中放. (3)Map<int,char>这样写是不正确的,因为,泛

  • Java中Map集合中的Entry对象用法

    Entry: 键值对 对象. 在Map类设计是,提供了一个嵌套接口(static修饰的接口):Entry.Entry将键值对的对应关系封装成了对象,即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值. Entry为什么是静态的? Entry是Map接口中提供的一个静态内部嵌套接口,修饰为静态可以通过类名调用. Map集合遍历键值对的方式: Set<Map.Entry<K,V>> entrySet(); //返回此映射中包含的映射

  • 关于Java8中map()和flatMap()的一些事

    两个方法的背景 这两个方法看起来做着同样的事情,但实际上又有些不一样.看源码部分是这样的 package java.util.stream; map()方法 /** * @param <R> The element type of the new stream * @param mapper a <a href="package-summary.html#NonInterference" rel="external nofollow" rel=&q

  • 深入了解TypeScript中的映射类型

    目录 1. 基本概念 (1)索引访问类型 (2)索引签名 (3)联合类型 (4)keyof 类型运算符 (5)元组类型 (6)条件类型 2. 映射类型 (1)初体验 (2)概念 (3)实例 3. 实用程序中的映射 (1)Partial (2)Exclude 4. 构建映射类型 DRY 原则(Don't repeat yourself)是软件开发中最重要的原则之一,即不要重复自己.应该避免在代码中的两个或多个地方存在重复的业务逻辑. 在 TypeScript 中,映射类型可以帮助我们避免编写重复的

  • vuex与map映射实现方法梳理分析

    目录 Vuex vuex执行过程 vuex的使用 getters配置 Map映射 Vuex vuex执行过程 相当于一个公共的资源库,保存共有的数据 使用场景:点击按钮后,将数据保存到store身上,跳转路由后使用 将actions,mutations(操作数据),state(储存数据),都交给store管理,storez在vc和vm上都有 其中state里面是自定义的一些变量,需要用来保存数据:mutations是用来触发事件,相当于方法,用户需要通过触发这个方法,借此来保存数据:第二个参数为

  • python中map()函数的使用方法示例

    前言 在python里有一个函数map(),它有点高大上的感觉.本文将详细给大家介绍python中map()函数使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 或许你已经看过GOOGLE最挣钱的论文: "MapReduce: Simplified Data Processing on Large Clusters" Google的那篇MapReduce论文里说:Our abstraction is inspired by the map and redu

随机推荐