IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6学习笔记(九)-- Map对象 -> 正文阅读

[JavaScript知识库]ES6学习笔记(九)-- Map对象

前言:

了解Map之前,我们先来看看什么是键值对。
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),也就是{ key:value }的形式。
但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
所以ES6提供了Map来解决这个问题,它类似于对象,也是键值对的集合,但是 “键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
也就是 由原来的 字符串 - 值 ,变成了 值 - 值


一、Map的特性

Map对象支持使用复杂数据结构作为key,所以Map对象会接收一个二维数组。且里层数组的 [ 0 ] 接收的是 key,[ 1 ] 接收的是 value。

const map = new Map([
    ['name', '三笠'],
    ['age', 16],
    ['isMan',false]
  ]);
console.log(map);

在这里插入图片描述

当然,里层的数组不只能放字符串,数字,布尔值那些,还可以放函数,NaN等

const map = new Map([
    [{function () {console.log('a');}},{function () {console.log('b');}}],
    [NaN,NaN],
    [undefined,undefined],
    ['','']
  ]);
console.log(map);

在这里插入图片描述

二、实例的属性和操作方法

实例属性描述
sizesize属性返回 Map 结构的成员总数。
实例方法描述
set(key, value)set方法设置键名key对应的键值为value,然后返回整个 Map 结构。
get(key)get方法读取key对应的键值,如果找不到key,返回undefined。
has(key)has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
delete(key)delete方法删除某个键,返回true。如果删除失败,返回false。
clear()clear方法清除所有成员,没有返回值。
const map = new Map([
    ['name', '三笠'],
    ['age', 16],
    ['isMan',false]
]);
console.log(map.size);

map.set('hobby', 'kill the huge')
console.log(map);

console.log(map.get('name'));

console.log(map.has('age'));

console.log(map.delete('hobby'));

console.log(map);

在这里插入图片描述

三、Map的遍历

方法描述
keys()返回 键名 的遍历器
values()返回 键值 的遍历器
entries()返回 键值对 的遍历器
forEach()使用 回调函数 遍历 每个成员

只要明白Map中哪一个是key,哪一个是value,那么这三种方法 keys(),values(),entries() 和前面的ES6对象用法一致,就不多赘述。

const map = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);

for (let item of map.entries()) {
  console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"

// 或者
for (let [key, value] of map.entries()) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

// 等同于使用map.entries()
for (let [key, value] of map) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

map.forEach((value,key) => {
    console.log(key, value);
});
// "F" "no"
// "T" "yes"

四、与其他数据结构的互相转换

(1)Map 转为数组

Map 转为数组最方便的方法,就是使用扩展运算符(…)。

const myMap = new Map()
myMap.set(true, 7)
myMap.set({foo: 3}, ['abc']);
console.log([...myMap]);
// [ [ true, 7 ], [ { foo: 3 }, [ 'abc' ] ] ]

(2)数组 转为 Map

将数组传入 Map 构造函数,就可以转为 Map。

(3)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 }

(4)对象转为 Map

对象转为 Map 可以通过Object.entries()。

let obj = {"a":1, "b":2};
let map = new Map(Object.entries(obj));

此外,也可以自己实现一个转换函数。

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}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:45:41  更:2021-11-15 15:48:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 19:22:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码