JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解
Set數(shù)據(jù)結(jié)構(gòu)
Set 是 ES6 中引入的一種新的數(shù)據(jù)結(jié)構(gòu),它是一種集合,可以存儲(chǔ)任意類(lèi)型的數(shù)據(jù)
Set 每個(gè)元素的值在集合中是唯一的。
使用 Set 數(shù)據(jù)結(jié)構(gòu)可以方便地去除數(shù)組或?qū)ο笾械闹貜?fù)元素。
應(yīng)用場(chǎng)景
// 1 數(shù)組去重 const arr = [1, 2, 3, 2, 1]; const set = new Set(arr); const newArr = Array.from(set); // newArr = [1, 2, 3] // 2 對(duì)象去重 const arr = [{ id: 1 }, { id: 2 }, { id: 1 }, { id: 3 }]; const set = new Set(arr.map(item => item.id)); const newArr = Array.from(set, id => ({ id })); // newArr = [{ id: 1 }, { id: 2 }, { id: 3 }]
在上面的代碼中,我們首先使用 Array.map 將數(shù)組中的對(duì)象映射為它們的 id 值,
然后使用 new Set 去除重復(fù)的 id 值。
最后,我們使用 Array.from 將集合轉(zhuǎn)換為對(duì)象數(shù)組,
并根據(jù)每個(gè) id 值創(chuàng)建一個(gè)新的對(duì)象,得到不重復(fù)對(duì)象的數(shù)組。
Map 數(shù)據(jù)結(jié)構(gòu)
解釋
Map是一種 js 數(shù)據(jù)結(jié)構(gòu),與數(shù)組的 map 方法并非一種,要區(qū)分開(kāi)來(lái)
Map數(shù)據(jù)結(jié)構(gòu)來(lái)管理數(shù)據(jù),能提高代碼的可讀性
Map 相比較 對(duì)象格式 存儲(chǔ)速度要更快
// 創(chuàng)建一個(gè)Map對(duì)象 const formData = new Map(); // 添加表單元素的值到Map中 formData.set('username', 'Tom'); formData.set('password', '123456'); // 獲取表單元素的值 const username = formData.get('username');// username = Tom const password = formData.get('password');// password = 123456
通過(guò)使用Map來(lái)管理數(shù)據(jù),可以使代碼更加簡(jiǎn)潔和易于維護(hù)。
同時(shí),Map也提供了一些方便的方法,如set()、get()、has()、delete()等,可以方便地對(duì)數(shù)據(jù)進(jìn)行操作。
使用場(chǎng)景
1. 管理表單數(shù)據(jù)
當(dāng)頁(yè)面中有多個(gè)表單元素需要進(jìn)行數(shù)據(jù)交互時(shí),可以使用Map來(lái)存儲(chǔ)表單數(shù)據(jù)。例如:
const formData = new Map(); formData.set('username', 'Tom'); formData.set('password', '123456'); // 通過(guò)get()方法來(lái)獲取已存儲(chǔ)的數(shù)據(jù) const username = formData.get('username');// username = Tom const password = formData.get('password');// password = 123456
2. 管理頁(yè)面狀態(tài)
當(dāng)頁(yè)面中存在一些狀態(tài)需要管理時(shí),可以使用Map來(lái)存儲(chǔ)狀態(tài)。例如:
const state = new Map(); state.set('loading', false); state.set('error', null); // 通過(guò)set()方法來(lái)更新已存儲(chǔ)的數(shù)據(jù) state.set('loading', true); state.set('error', '請(qǐng)求失敗');
3. 管理列表數(shù)據(jù)
當(dāng)頁(yè)面中存在一個(gè)列表需要管理時(shí),可以使用Map來(lái)存儲(chǔ)列表數(shù)據(jù)。例如:
const list = new Map(); list.set(1, { id: 1, name: 'Tom' }); list.set(2, { id: 2, name: 'Join' }); // 通過(guò)get()方法來(lái)獲取已存儲(chǔ)的數(shù)據(jù) const item = list.get(1); // item = { id: 1, name: 'Tom' } const item = list.get(2); // item = { id: 2, name: 'Join' }
4. 管理緩存數(shù)據(jù)
當(dāng)我們需要緩存一些數(shù)據(jù)時(shí),可以使用Map來(lái)存儲(chǔ)緩存數(shù)據(jù)。例如:
const cache = new Map(); cache.set('key1', 'value1'); cache.set('key2', 'value2'); // 通過(guò)get()方法來(lái)獲取已存儲(chǔ)的數(shù)據(jù) const value = cache.get('key1');// value = value1 const value = cache.get('key2');// value = value2
以上就是JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript Set Map數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于leaflet.js實(shí)現(xiàn)修改地圖主題樣式的流程分析
這篇文章主要介紹了基于leaflet.js實(shí)現(xiàn)修改地圖主題樣式的流程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05關(guān)于IE只能嵌套27層表格的說(shuō)法證明
關(guān)于IE只能嵌套27層表格的說(shuō)法證明...2006-11-11JavaScript基于用戶(hù)照片姓名生成海報(bào)
這篇文章主要介紹了JavaScript基于用戶(hù)照片姓名生成海報(bào),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05前端學(xué)習(xí)筆記style,currentStyle,getComputedStyle的用法與區(qū)別
這篇文章主要介紹了前端學(xué)習(xí)筆記style,currentStyle,getComputedStyle的用法與區(qū)別,需要的朋友可以參考下2016-05-05JavaScript實(shí)現(xiàn)鼠標(biāo)滑過(guò)圖片變換效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)鼠標(biāo)滑過(guò)圖片變換效果的方法,涉及javascript控制鼠標(biāo)事件及樣式變換的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04layui實(shí)現(xiàn)數(shù)據(jù)分頁(yè)功能
這篇文章主要為大家詳細(xì)介紹了layui實(shí)現(xiàn)數(shù)據(jù)分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07在頁(yè)面中js獲取光標(biāo)/鼠標(biāo)的坐標(biāo)及光標(biāo)的像素坐標(biāo)
頁(yè)面JS光標(biāo)/鼠標(biāo)坐標(biāo),百度統(tǒng)計(jì)中有個(gè)熱點(diǎn)統(tǒng)計(jì)圖,我們要做的就是獲取光標(biāo)的像素坐標(biāo)2013-11-11js跨域問(wèn)題淺析及解決方法優(yōu)缺點(diǎn)對(duì)比
所謂js跨域問(wèn)題,是指在一個(gè)域下的頁(yè)面中通過(guò)js訪(fǎng)問(wèn)另一個(gè)不同域下 的數(shù)據(jù)對(duì)象,出于安全性考 慮,幾乎所有瀏覽器都不允許這種跨域訪(fǎng)問(wèn),這就導(dǎo)致在一些ajax應(yīng)用中,使用跨域的web service會(huì)成為一個(gè)問(wèn)題。 要解決跨域的問(wèn)題,就是本文我們需要探討的了2014-11-11ES6中Promise、async、await用法超詳細(xì)講解指南
async+await是ES6中引入的異步編程解決方案,旨在解決異步編程中的回調(diào)地獄問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于ES6中Promise、async、await用法超詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下2024-08-08javascript 動(dòng)態(tài)table添加colspan\rowspan 參數(shù)的方法
動(dòng)態(tài)的給某個(gè)表對(duì)象添加列屬性和行屬性,采用obj.setAttribute("rowspan",n)(即rowspan=n)不能生效。2009-07-07