欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中的Map數(shù)據(jù)結(jié)構(gòu)詳解

 更新時(shí)間:2022年01月24日 16:25:42   作者:CSPsy  
這篇文章主要為大家介紹了JavaScript的Map數(shù)據(jù)結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

1. 什么是 Map

Map 就是映射的意思,即從鍵到值的映射。

Map 保存鍵值對(duì),并且能夠記住鍵的原始插入順序

那么它和 Object 有什么區(qū)別 ?

對(duì)象一般用字符串作鍵

const obj = {
	val : "object"
}

任何值(對(duì)象或者原始值) 都可以作為 Map 的一個(gè)鍵或一個(gè)值

const m = new Map();;
m.set('val', 'map');
m.set(1, 'number');
m.set(new Set([1, 2]), 'set');
m.set({}, 'object');
console.log(m);

在這里插入圖片描述

所以,在鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)中,Map 比 Object 更為合適

2. Map 構(gòu)造函數(shù)

對(duì)于 Set 的構(gòu)造函數(shù)的參數(shù),可以傳遞以下幾種形式。

2.1) 數(shù)組

注意,要傳遞的是二維數(shù)組,因?yàn)槎S數(shù)組才能體現(xiàn)出鍵值對(duì)

const m = new Map([
    ['val', 'map'],
    ['apple', 'fruit']
]);
console.log(m);

在這里插入圖片描述

2.2) Set

以 Set 作為參數(shù),也要體現(xiàn)出鍵值對(duì)形式

對(duì) Set 不了解的,想了解的可以看看下面這篇文章:JavaScript—Set

const m = new Map(new Set([
    ['tigger', 'animal'],
    ['orange', 'fruit']
]));
console.log(m);

在這里插入圖片描述

2.3) Map

const m1 = new Map([
    ['watermelon', 'fruit'],
    ['cat', 'animal']
])
const m2 = new Map(m1);
console.log(m2);

在這里插入圖片描述

這里相當(dāng)于把m1復(fù)制過(guò)去,給了m2,不過(guò)它們不是同一個(gè) Map

console.log(m2 === m1);

在這里插入圖片描述

綜上,Map 構(gòu)造函數(shù)的參數(shù)要能體現(xiàn)出鍵值對(duì)的形式。

3. Map 的實(shí)例屬性和方法

3.1) Map 的屬性

size

Map 的屬性,有一個(gè)屬性size,用來(lái)存儲(chǔ)它的成員個(gè)數(shù)

const m = new Map([
    ['val', 'map'],
    ['cat', 'animal'],
    ['orange', 'fruit']
]);
console.log(m.size);

在這里插入圖片描述

3.2) Map 的方法

set

給 Map 中添加成員

const m = new Map();
// 它的參數(shù)為兩個(gè),第一個(gè)為鍵,第二個(gè)為值
m.set('val', 'map');
console.log(m);
// 可以連綴 Set
m.set('orange', 'fruit').set('cat', 'animal');
console.log(m);
// 添加的新成員如果鍵已經(jīng)存在了,那么將會(huì)覆蓋它
// 鍵的順序不會(huì)發(fā)生改變,因?yàn)?Map 能夠記住鍵的原始插入順序
m.set('orange', 'sweet');
console.log(m);

在這里插入圖片描述

get

通過(guò)鍵獲取 Map 的成員

const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);
console.log(m.get('val'));
console.log(m.get(true));
// 獲取不存在的鍵時(shí),會(huì)返回 undefined
console.log(m.get('tigger'));

在這里插入圖片描述

has

用來(lái)判斷 Map 是否含有某個(gè)鍵

const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);
console.log(m.has(true));
console.log(m.has('true'));

在這里插入圖片描述

delete

通過(guò)鍵,來(lái)刪除 Map 中的成員

const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);
m.delete('cat');
// 刪除不存在的成員,將什么也不會(huì)發(fā)生,也不會(huì)報(bào)錯(cuò)
m.delete('true');
console.log(m);

在這里插入圖片描述

clear

刪除 Map 的所有成員

const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);
m.clear();
console.log(m);

在這里插入圖片描述

forEach

用來(lái)遍歷 Map 的成員

它有兩個(gè)參數(shù),第一個(gè)參數(shù)為回調(diào)函數(shù),第二個(gè)參數(shù)設(shè)定回調(diào)函數(shù)中this指向什么,即

m.forEach(回調(diào)函數(shù), 回調(diào)函數(shù)的指向)

先來(lái)看第一個(gè)參數(shù)

m.forEach(function(value, key, map){
	value 就是 Map 的值
	key 就是 Map 的鍵
	map 就是前面Map的本身,即這里 map === m
});

通過(guò)一個(gè)例子理解一下:

const m = new Map([    ['val', 'map'],    ['orange', 'fruit'],    ['cat', 'animal'],    [true, 'false']]);m.forEach(function(value, key, map) {    console.log(value, key, map == m);});const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);

m.forEach(function(value, key, map) {
    console.log(value, key, map == m);
});

在這里插入圖片描述

再來(lái)看第二個(gè)參數(shù)

const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);

m.forEach(function(value, key, map) {
    console.log(this);
}, document);
const m = new Map([
    ['val', 'map'],
    ['orange', 'fruit'],
    ['cat', 'animal'],
    [true, 'false']
]);

m.forEach(function(value, key, map) {
    console.log(this);
}, document);

在這里插入圖片描述

4. Map的注意事項(xiàng)

Map 對(duì)鍵名是否相同的判斷基本遵循嚴(yán)格相等===的判斷

不過(guò)對(duì)于NaN,在 Set 中,NaN 等于 NaN

5. Map的使用場(chǎng)景

  • 只需要鍵值對(duì)的結(jié)構(gòu)時(shí),即 key => value 的結(jié)構(gòu)
  • 需要字符串以外的鍵或者值

舉個(gè)例子來(lái)看看 Map 的應(yīng)用:

對(duì)DOM元素進(jìn)行操作

先寫(xiě)一個(gè) HTML 代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Map</title>
</head>
<body>
    <p>one</p>
    <p>two</p>
    <p>three</p>
</body>
</html>

此時(shí)效果是這樣的:

在這里插入圖片描述

然后對(duì)p元素進(jìn)行修改:

<script>
    // 利用數(shù)組解構(gòu)賦值將 p 元素獲取的同時(shí)解構(gòu)出來(lái)
    const [p1, p2, p3] = document.querySelectorAll('p');
    const m = new Map([
        [p1, new Map([
            ['color', 'blue'],
            ['fontSize', '40px']
        ])], 
        [p2,  new Map([
            ['color', 'orange'],
            ['fontSize', '40px']
        ])], 
        [p3,  new Map([
            ['color', 'green'],
            ['fontSize', '40px']
        ])]
    ]);

    m.forEach((propMap, elem) => {
        propMap.forEach((value, prop) => {
            elem.style[prop] = value;
        });
    });
</script>

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • js 輪播效果實(shí)例分享

    js 輪播效果實(shí)例分享

    本文主要分享了基于js實(shí)現(xiàn)的輪播效果的實(shí)例代碼,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2016-12-12
  • Javascript的動(dòng)態(tài)增加類的實(shí)現(xiàn)方法

    Javascript的動(dòng)態(tài)增加類的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Javascript的動(dòng)態(tài)增加類的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • taro小程序添加骨架屏的實(shí)現(xiàn)代碼

    taro小程序添加骨架屏的實(shí)現(xiàn)代碼

    這篇文章主要介紹了taro小程序添加骨架屏的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • JavaScript實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音的庫(kù)文件示例

    JavaScript實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音的庫(kù)文件示例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音的庫(kù)文件,結(jié)合具體實(shí)例分析了JSPinyin庫(kù)文件與簡(jiǎn)單使用技巧,需要的朋友可以參考下
    2016-12-12
  • js數(shù)組方法reduce經(jīng)典用法代碼分享

    js數(shù)組方法reduce經(jīng)典用法代碼分享

    本文給大家整理了很多關(guān)于js數(shù)組方法reduce的經(jīng)典代碼片段,能夠讓大家更好的理解reduce的實(shí)例用法,一起學(xué)習(xí)下吧。
    2018-01-01
  • JavaScript的String字符串對(duì)象常用操作總結(jié)

    JavaScript的String字符串對(duì)象常用操作總結(jié)

    String對(duì)象用于存儲(chǔ)字符串?dāng)?shù)據(jù),這里我們做了JavaScript的String字符串對(duì)象常用操作總結(jié),需要的朋友可以參考下
    2016-05-05
  • javascript中的變量作用域以及變量提升詳細(xì)介紹

    javascript中的變量作用域以及變量提升詳細(xì)介紹

    在javascript中, 理解變量的作用域以及變量提升是非常有必要的。這個(gè)看起來(lái)是否很簡(jiǎn)單,但其實(shí)并不是你想的那樣,還要一些重要的細(xì)節(jié)你需要理解
    2013-10-10
  • Javascript的表單驗(yàn)證-初識(shí)正則表達(dá)式

    Javascript的表單驗(yàn)證-初識(shí)正則表達(dá)式

    JavaScript 可用來(lái)在數(shù)據(jù)被送往服務(wù)器前對(duì) HTML 表單中的這些輸入數(shù)據(jù)進(jìn)行驗(yàn)證。接下來(lái)通過(guò)本文給大家介紹Javascript的表單驗(yàn)證-初識(shí)正則表達(dá)式,對(duì)js表單驗(yàn)證正則表達(dá)式相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • options預(yù)檢請(qǐng)求的前后端解決方式詳解

    options預(yù)檢請(qǐng)求的前后端解決方式詳解

    這篇文章主要為大家介紹了options預(yù)檢請(qǐng)求的前后端解決方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Angular中針對(duì)路由Routing原理刨析

    Angular中針對(duì)路由Routing原理刨析

    在Angular中,最好在一個(gè)頂級(jí)模塊中加載和配置路由,它專注于路由功能,然后由根模塊AppModule導(dǎo)入它,最后還有初始化并監(jiān)聽(tīng)瀏覽器的地址變化
    2023-01-01

最新評(píng)論