NodeJs - 集合对象序列化问题

news2025/1/10 16:48:13

NodeJs - 集合对象序列化问题

  • 一. 集合对象的序列化问题
    • 1.1 Map 和 Object 的区别
    • 1.2 Map 的相关转换
      • Map 和 Array 互转
      • Map 和 Object 互转
    • 1.3 Set 的相关转换
      • Set 和 Array 互转

一. 集合对象的序列化问题

案例如下:我们创建一个Map和一个Set集合,并用JSON.stringify进行序列化操作。

(async () => {
    const map = new Map();
    map.set(1, '1');
    map.set(2, '1');
    console.log('map', JSON.stringify(map));

    const set = new Set();
    set.add(1);
    set.add(2);
    console.log('set', JSON.stringify(set))
})();

结果如下:
在这里插入图片描述
可见,JSON.stringifyMapSet 的序列化是不支持的。那么我们如何进行修改?我们一点点分析。

1.1 Map 和 Object 的区别

  • 一个 Object 的键只能是字符串或者 Symbols但一个 Map 的键可以是任意值。
  • Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
  • Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
  • Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。

1.2 Map 的相关转换

先说下两个方法:

  • Object.entries():返回一个数组,成员是对象自身的所有可遍历属性的键值对数组。
  • Object.fromEntries():是Object.entries()的逆操作,用于将一个键值对数组转为对象。

Map 和 Array 互转

ArrayMap:如果想要Array转换成Map,我们则需要传入一个二维数组,每个数组的第一个值为key,第二个值为value

MapArray:使用Array.from即可。

(async () => {
    //二维数组
    const arr = [["key1", "value1"], ["key2", "value2"]];
    // Map 构造函数可以将一个 二维 键值对数组转换成一个 Map 对象
    const myMap = new Map(arr);
    console.log(myMap);
    // 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组
    const outArray = Array.from(myMap);
    console.log(outArray);
})();

Map 和 Object 互转

如果想把Map进行序列化,我们可以把它转换成Object对象。有两种思路:

  • 我们可以将Map对象转换为一个Object对象,再进行序列化。
  • 我们遍历Map对象的键值对,然后构造出一个Object对象。
(async () => {
    const map = new Map();
    map.set(1, '1');
    map.set(2, '1');
    // JS语法(TS里面可能会提示报错) Object.fromEntries 用于将一个键值对数组转为对象
    console.log('map-js', JSON.stringify(Object.fromEntries(map)));
    // TS语法(JS和TS通用),通过遍历键值对来构造
    const tsMapObj = Array.from(map.entries()).reduce((obj, [key, value]) => (obj[key] = value, obj), {})
    console.log('map-ts', JSON.stringify(tsMapObj));
    // Object 转 Map
    const mapFromObj = new Map(Object.entries(tsMapObj));
    console.log(mapFromObj)
    console.log(mapFromObj.get('1'))
    console.log(mapFromObj.get('2'))
})();

结果如下:(转成Object对象之后,就可以进行序列化输出啦)
在这里插入图片描述

1.3 Set 的相关转换

Set 和 Array 互转

(async () => {
    const set = new Set();
    set.add(1);
    set.add(2);
    // Set 转 Array,
    const arr = Array.from(set)
    console.log('set', JSON.stringify(arr));
    // Array 转 Set 构造Set的时候传入即可
    console.log(new Set(arr))
})();

结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1194507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宋浩高等数学笔记(三)微分中值定理

首先是考研大纲包含的内容: 1.理解并会用罗尔(Rolle)定理、拉格朗日(Lagrange)中值定理和泰勒(Taylor)定理,了解并会用柯西(Cauchy)中值定理. 2.掌握用洛必达法则求未定式极限的方法. 3.理解函数的极值概念,掌握用导数判断函数的单调性和求函…

黑窗口连接远程服务

ssh root192.168.x.x 回车输入密码 查看docker docker ps 停止正在运行的服务 docker stop xxxxx 删除服务 docker rm xxxxx 查看镜像 docker images 删除镜像 docker rmi xxxxx 删除镜像 启动并运行整个服务 docker compose up -d jar包名称 idea 使用tcp方式连接docker 配置d…

mongo实际业务场景实战

业务场景 有四个业务信息,分别是适用部门、适用岗位、适用职级、适用专业。 1.适用部门有三个层级类似D001表示一级部门、D001002表示二级部门、D001002001表示三级部门,ALL表示所有部门。 2.适用岗位有岗位A、岗位B、ALL等,ALL表示适用所有岗位。 3.适用职级有M-1,M-2、AL…

【免费送书】写博客模板

【点我-这里送书】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的…

Q3季刊|Coremail管理员社区Q3季刊发布

2023年Q3季刊新近完成,接下来将带领大家回顾2023年Q3Coremail管理员社区的精彩活动和内容。 01、Coremail管理员社区 Coremail 管理员社区属于云服务中心板块之一,由Coremail服务团队、邮件安全团队及多条产品线共同维护,定位为知识库社区&…

【UE5】 虚拟制片教程

目录 效果 步骤 一、下载素材 二、将视频转成PNG序列 三、开始虚拟制片 效果 步骤 一、下载素材 首先下载绿幕视频素材 链接:百度网盘 请输入提取码 提取码:jyfk 二、将视频转成PNG序列 打开“Adobe Premiere Pro”,导入素材 …

家乡特色饮食体验系统的设计与实现-计算机毕设 附源码 27533

家乡特色饮食体验系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对家乡特色…

Springboot养老院信息管理系统的开发-计算机毕设 附源码27500

Springboot养老院信息管理系统的开发 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,…

数据结构与算法C语言版学习笔记(6)-树、二叉树、赫夫曼树

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、树的定义1.结点的度、树的度2.结点的逻辑关系3.树的深度4.有序树和无序树5.森林 二、树的存储结构(1)双亲表示法(2&…

神经网络可视化:卷积核可视化

文章目录 前言一般过程: 一、代码示例二、卷积核和输入图片相乘可视化总结 前言 卷积核可视化是一种用于理解卷积神经网络 (CNN) 中卷积层的工作原理和特征提取能力的方法。通过可视化卷积核,我们可以观察卷积层学习到的特征模式,帮助我们理…

煤矿企业如何选择合适的设备健康管理系统

在煤矿开采的过程中,机电设备发挥着重要的作用。但大量的机电设备的使用也给煤矿企业设备管理提出了一定的要求。随着工业领域数字化的深入应用,煤矿机电设备的自动化、智能化管理已经成为煤矿企业发展的重要手段。保障机电设备的正常运行,减…

跨境电商源码搭建:开启你的全球贸易新纪元

随着全球电子商务的快速发展,跨境电商已经成为越来越多企业的必然选择。通过跨境电商平台,企业可以拓展海外市场,扩大销售范围,提升品牌影响力。而要实现这一目标,源码搭建是不可或缺的一环。本文将为你揭示跨境电商源…

【紫光同创国产FPGA教程】——【PGL22G第十章】DDR3读写实验例程

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注www.meyesemi.com) 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光…

ChatGPT 宕机?OpenAI 将中断归咎于 DDoS 攻击

您的 ChatGPT 已关闭吗?您是否遇到 ChatGPT 问题,例如连接问题或遇到“长响应时出现网络错误”?– ChatGPT 遭受了一系列 DDoS 攻击,显然是由匿名苏丹组织策划的。 OpenAI 的 ChatGPT 是一款流行的人工智能聊天机器人,…

centos7安装Nexus(Maven私服)与配置使用教程

之前有位大佬问我,他说有个第三方的Jar包,在idea导出库中使用,现在要部署上线测试,要如何导进去打包。 我说,不用那么麻烦,搞个Nexus私服,将Jar上传上去,然后配置Maven的setting文件…

PHP的curl会话

介绍: Curl(Client for URLs)在PHP中是一个强大而灵活的工具,用于进行各种网络请求。PHP中的Curl库允许开发者通过代码模拟HTTP请求、与API交互、进行数据传输等。在这里,我们将详细解析PHP中Curl会话的各个方面,涵盖…

【博士每天一篇文献-算法】Modular state space of echo state network

阅读时间:2023-11-2 1 介绍 年份:2013 作者:陈卫彪,华南理工大学计算机科学与工程学院, 期刊:Neurocomputing 引用量:17 本文介绍了一种改进回声状态网络(ESN)预测性能的新方法。该…

@CreateCache:深度解析其功能与优势

1. CreateCache前言 在现代Web应用程序开发中,缓存是提高性能和响应速度的重要手段之一。CreateCache注解是JetCache框架中用于创建缓存的注解。本文将介绍CreateCache注解以及它在缓存管理中的作用。 2. CreateCache使用示例 以下是使用CreateCache注解的一个简…

影刀掌握手头,仿佛自由人--更符合中国宝宝体质的自动化工具

以前,影刀是一个邂逅的初见小工具,新奇在里头,踌躇在外头; 现在,影刀是一个稳定的职场贾维斯,高效在里头,悠闲在外头; 以后,影刀是一个潜力的知己老司机,有序…

Pow(x, n)

题目链接 Pow(x, n) 题目描述 注意点 n 是一个整数要么 x 不为零&#xff0c;要么 n > 0-100.0 < x < 100.0 解答思路 完成x的n次方的功能 代码 class Solution {public double myPow(double x, int n) {long N n;return N > 0 ? quickMul(x, N) : 1.0 / …