博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中Map与JSON转换要小心
阅读量:7104 次
发布时间:2019-06-28

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

用js的Map的时候发现了里面的一个小坑(也许是Java的惯性思维),在将Map转成字符串的时候会以数组字面量的形式保存。 先构造一个Map,如下

const map = new Map();map.set(1, 1);map.set(2, 2);console.log(map);复制代码

结果如图:

好的,没问题,当做如下转换:

console.log(JSON.parse(JSON.stringify(map)));复制代码

结果意外发生了

键值对变成了数组,(
key对应下标0,
value对应下标1)。 什么鬼?为什么不是我想要的Map了?还想要用Map来取数据怎么办? 方法有二:

1.遍历

当然,这是一种比较的方式,代码如下:

const map = new Map();let jsonStr = '[[1,1],[2,2]]';let values = JSON.parse(jsonStr);for (let i in values) {  map.set(values[i][0], values[i][1]);//注意这里取的是下标0和1}console.log(map);复制代码

2.构造器

翻看es6手册发现其构造函数可以接受一个二维数组作为参数,该数组的成员是表示键值对的数组,这正是我们想要的方式。因此,可以这样去构造Map:

let jsonStr = '[[1,1],[2,2]]';const map = new Map(JSON.parse(jsonStr));console.log(map);复制代码

输出结果如下:

两种方式都可以得到我们想要的结果。

参考文档:阮一峰 ;

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

你可能感兴趣的文章
如何修改ssh的端口号?
查看>>
我的友情链接
查看>>
mysql binlog配置
查看>>
使用正则表达式匹配嵌套Html标签
查看>>
书摘---创业36条军规8:资本的五个问题
查看>>
arduino 配eclipse的博客,有空看下
查看>>
linux下用mail命令发送邮件
查看>>
MongoDB复制集部署和基本管理
查看>>
单链表面试题(二)从头到尾打印单链表
查看>>
strcmp()
查看>>
CET,UTC,GMT,CST几种常见时间概述
查看>>
开源数字媒体资产管理系统:Razuna安装方法
查看>>
洛克菲勒给儿子的38封信(前14封选摘)
查看>>
揭秘双11“某东”背后的架构实战
查看>>
redis高可用之redis sentinel(哨兵)的搭建以及应用
查看>>
spring-boot+spring-session集成
查看>>
vmware挂载磁盘脱机解决方案
查看>>
多点触控实现图面的放大与缩小
查看>>
Android开发小记--开发实用工具类--数据库操作类
查看>>
memcached总结
查看>>