JavaScript的JSON處理Map的弊端

直接使用 Map 會遇到的問題及解決方案

直接使用 Map 會導致數據丟失,因為 JSON.stringify 無法序列化 Map。以下是詳細分析及解決方法:


  1. 問題復現
// 示例代碼
const myMap = new Map();
myMap.set('user1', { name: 'Alice' });
myMap.set('user2', { name: 'Bob' });// 保存 Map
utilts.setValuePlan('myMap', myMap); // 實際存儲的是空對象 `{}`// 讀取 Map
const loadedMap = utilts.getValuePlan('myMap'); 
console.log(loadedMap); // 輸出 `{}`,數據丟失!

  1. 根本原因
    ? JSON.stringify 不支持 MapMap 對象會被轉換為空對象 {},導致數據丟失。

? JSON.parse 無法還原 Map:即使手動存儲 Map 的內容,讀取時也無法自動恢復為 Map


解決方案(不修改存儲函數)

方法 1:存儲時手動轉換 Map 為數組
在調用 setValuePlan 前將 Map 轉換為數組,讀取時再轉回 Map

示例代碼

// 保存 Map
const myMap = new Map();
myMap.set('user1', { name: 'Alice' });
myMap.set('user2', { name: 'Bob' });// 轉換為數組 [[key1, value1], [key2, value2]]
const mapArray = Array.from(myMap.entries());
utilts.setValuePlan('myMap', mapArray); // ? 正確存儲// 讀取時轉回 Map
const loadedArray = utilts.getValuePlan('myMap') || [];
const loadedMap = new Map(loadedArray); // ? 恢復為 Map

方法 2:封裝工具函數
創建 Map 專用的存取函數,隱藏轉換邏輯。

示例代碼

// 保存 Map
export function setMapValue(key, map) {const mapArray = Array.from(map.entries());utilts.setValuePlan(key, mapArray);
}// 讀取 Map
export function getMapValue(key) {const mapArray = utilts.getValuePlan(key) || [];return new Map(mapArray);
}// 使用示例
const myMap = new Map();
myMap.set('user1', { name: 'Alice' });
setMapValue('myMap', myMap); // ? 存儲const loadedMap = getMapValue('myMap'); // ? 恢復

關鍵總結

步驟操作代碼示例
存儲轉換 Map 為數組utilts.setValuePlan(key, Array.from(map.entries()))
讀取轉換數組為 Mapnew Map(utilts.getValuePlan(key))

注意事項

  1. 數據兼容性:確保舊數據是數組格式(如 [[key1, value1], [key2, value2]])。
  2. 空值處理:讀取時處理可能的 null 或無效數據:
    const mapArray = utilts.getValuePlan(key) || [];
    
  3. 嵌套對象:如果 Map 的值包含不可序列化對象(如 Date),需額外處理。

通過手動轉換 Map 和數組,可以在不修改現有存儲函數的情況下安全使用 Map

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78594.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構】第五彈——Stack 和 Queue

文章目錄 一. 棧(Stack)1.1 概念1.2 棧的使用1.3 棧的模擬實現1.3.1 順序表結構1.3.2 進棧 壓棧1.3.3 刪除棧頂元素1.3.4 獲取棧頂元素1.3.5 自定義異常 1.4 棧的應用場景1.改變元素序列2. 將遞歸轉化為循環3. 四道習題 1.5 概念分區 二. 隊列(Queue)2.1 概念2.2 隊列的使用2.3…

第七屆能源系統與電氣電力國際學術會議(ICESEP 2025)

重要信息 時間:2025年6月20-22日 地點:中國-武漢 官網:www.icesep.net 主題 能源系統 節能技術、能源存儲技術、可再生能源、熱能與動力工程 、能源工程、可再生能源技術和系統、風力發…

深入解析C++ STL Stack:后進先出的數據結構

一、引言 在計算機科學中,棧(Stack)作為一種遵循后進先出(LIFO)?原則的數據結構,是算法設計和程序開發的基礎構件。C STL中的stack容器適配器以簡潔的接口封裝了底層容器的操作,為開發者提供了…

Golang | 自行實現并發安全的Map

核心思路,讀寫map之前加鎖!哈希思路,大map化分為很多個小map

Mac 「brew」快速安裝MySQL

安裝MySQL 在 macOS 上安裝 MySQL 環境可以通過Homebrew快速實現,以下是步驟指南: 方法 1:使用 Homebrew 安裝 MySQL 1. 安裝 Homebrew 如果尚未安裝 Homebrew,可以通過以下命令安裝: /bin/bash -c "$(curl -…

【數字孿生世界的搭建之旅:從0到1理解飛渡平臺】

數字孿生世界的搭建之旅:從0到1理解飛渡平臺 前言:數字分身的魔法 想象一下,如果你能在現實世界之外,創造一個物理世界的"分身",這個分身能完美復制現實中的一切變化,甚至可以預測未來可能發生…

【漏洞復現】Struts2系列

【漏洞復現】Struts2系列 1. 了解Struts21. Struts2 S2-061 RCE (CVE-2020-17530)1. 漏洞描述2. 影響版本3. 復現過程 1. 了解Struts2 Apache Struts2是一個基于MVC設計模式的Web應用框架,會對某些標簽屬性(比如 id)的…

[FPGA Video IP] Video Processing Subsystem

Xilinx Video Processing Subsystem IP (PG231) 詳細介紹 概述 Xilinx LogiCORE? IP Video Processing Subsystem (VPSS)(PG231)是一個高度可配置的視頻處理模塊,設計用于在單一 IP 核中集成多種視頻處理功能,包括縮放&#xf…

自動駕駛(ADAS)功能--相關名稱及縮寫

根據《道路車輛先進駕駛輔助系統(ADAS)術語及定義》GB/T 39263—2020,如下表格: 編號中文術語英文縮寫定義類別2.1.1先進駕駛輔助系統ADAS利用傳感、通信、決策及執行等裝置,實時監測駕駛員、車輛及行駛環境&#xff…

1.9軟考系統架構設計師:優秀架構設計師 - 超簡記憶要點、知識體系全解、考點深度解析、真題訓練附答案及解析

超簡記憶要點 1. 優秀架構師標準 ? 技術(深度/廣度) 實戰(大型項目) 素養(溝通/業務前瞻) 2. 演化路徑 📈 積累(技術/項目) → 思維(系統視角/抽象建模&…

(MySQL)庫的操作

目錄 創建數據庫 語法 創建數據庫實例 不使用可選項 使用可選項1 字符集和校驗規則 校驗規則對數據庫的影響 不區分大小寫 查看配置 添加可選項2 操縱數據庫 使用數據庫 查看數據庫 查看所有數據庫 查詢當前正在使用的數據庫名稱 顯示創建數據庫語句 修改數據庫…

10.ArkUI Grid的介紹和使用

ArkUI Grid 組件詳解與使用指南 Grid 是 ArkUI 中用于實現網格布局的容器組件,能夠以行和列的形式排列子組件。以下是 Grid 組件的詳細介紹和使用方法。 基本介紹 Grid 組件特點: 支持固定列數和自適應布局提供靈活的間距和排列控制支持滾動顯示大量…

目標檢測原理簡介

目標檢測是一類計算機視覺任務,簡單來說,目標檢測可被定義為在計算機中輸入一張圖像,計算機需要找出圖像中所有感興趣的目標(物體),確定它們的類別和位置,如圖一所示。目標檢測是計算機視覺領域的核心問題之一,相較于最原始的將整張圖片分類為某一類別,目標檢測不光可…

ZYNQ筆記(十四):基于 BRAM 的 PS、PL 數據交互

版本:Vivado2020.2(Vitis) 實驗任務: PS 將字符串數據寫入BRAM,再將數據讀取出來;PL 從 BRAM 中讀取數據,bing。通過 ILA 來觀察讀出的數據,與前面串口打印的數據進行對照&#xff0…

Python-Django系列—部件

部件是 Django 對 HTML 輸入元素的表示。部件處理 HTML 的渲染&#xff0c;以及從對應于部件的 GET&#xff0f;POST 字典中提取數據。 內置部件生成的 HTML 使用 HTML5 語法&#xff0c;目標是 <!DOCTYPE html>。例如&#xff0c;它使用布爾屬性&#xff0c;如 checked…

【Leetcode 每日一題】2799. 統計完全子數組的數目

問題背景 給你一個由 正 整數組成的數組 n u m s nums nums。 如果數組中的某個子數組滿足下述條件&#xff0c;則稱之為 完全子數組 &#xff1a; 子數組中 不同 元素的數目等于整個數組不同元素的數目。 返回數組中 完全子數組 的數目。 子數組 是數組中的一個連續非空序…

卷積神經網絡(二)

1 卷積運算的兩個問題&#xff1a; 1.1 圖像邊緣信息使用少 邊緣的像素點可能只會被用一次或者2次&#xff0c;中間的會用的更多。 1.2 圖像被壓縮 5*5的圖像&#xff0c;如果經過3*3的卷積核后&#xff0c;大小變成3*3的。 N*N的圖像&#xff0c;果經過F*F的卷積核后&#x…

組網技術-DHCP服務器,RIP協議,OSPF協議

1.DHCP Server提供三種IP地址分配策略&#xff1a; 手工分配地址 自動分配地址 n 動態分配地址 2.DHCP報文類型 DHCP DISCOVER(廣播)&#xff1a;用于尋址DHCP Server DHCP OFFER&#xff08;單播&#xff09;&#xff1a;攜帶分配給客戶端的IP地址 DHCP REQUEST&#xff08;…

反爬策略應對指南:淘寶 API 商品數據采集的 IP 代理與請求偽裝技術

一、引言? 在電商數據驅動決策的時代&#xff0c;淘寶平臺海量的商品數據極具價值。然而&#xff0c;淘寶為保障平臺安全和用戶體驗&#xff0c;構建了嚴密的反爬體系。當采集淘寶 API 商品數據時&#xff0c;若不采取有效措施&#xff0c;頻繁的請求極易觸發反爬機制&#x…

學習筆記(算法學習+Maven)

單調隊列優化多重背包 #include <bits/stdc.h> using namespace std; const int M 2010; const int N 20010; int q[N]; int hh 0, tt -1; int f[N]; int g[N]; int v[M], w[M], s[M]; int n, m; int main() { cin >> n >> m; for (int i 1; …