国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

20190727-前端筆記-Map結構

everfly / 798人閱讀

摘要:將對象當做的一個鍵獲取鍵為的值刪除鍵為的鍵值對判斷是否包含鍵值對但是我在看阮一峰的的時候,看到一些針對自己的問題,不太好理解。

在JS的對象(Object)中,本質是就是鍵值對的集合(HASH)
{
"name":"Kisn",
Brith:941018
}

但是在實際情況使用中,我們不能很好地使用它,它也會導致很多意外。特別是,我想要一個動態的鍵時.

const data = {};
const element = document.getElementById("myDiv");

data[element] = "metadata";
data["[object HTMLDivElement]"] // "metadata"

所以我們現在有一個數據結構,它類似于對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當作鍵。

Map
let m = new Map(),
    o = {a:1};
    
m.set(o,"this is a json")
m.got(0) // "this is a json"

m.has(o) // true
m.delete(o) // true
m.has(o) // false

將對象o當做m的一個鍵

new Map().get(x) 獲取鍵為x的值

new Map().delete(x) 刪除鍵為x的鍵值對

new Map().has(x) 判斷是否包含x鍵值對

但是我在看阮一峰的md的時候,看到一些針對自己的問題,不太好理解。我在下面梳理下:

如何new Map()

我看過阮一峰的文章以后,我自己嘗試new一個Map數據的,但是老是報錯:

正確的寫法

var m5 = new Map([
    ["asd","name"],
    [{no:1,name:"Kisn",age:25},"intro"]
])

我的理解是new Map()里面是類數組[],類數組[]里面才是對象(參數)=> [[object,value],[object1,value2]]

注意事項

在Map數據結構中,我們需要注意的是,Map的鍵指向的是一個對象,而不是一個具體的值

const map = new Map();

map.set(["a"], 555);
map.get(["a"]) // undefined

為什么會報undefined?

因為很可能兩個["a"]沒有指向同一個對象,內存地址是不一樣的。所以在Map數據結構中被視為2個鍵.

const m = new Map();

const key1 = ["a"];
const key2 = ["a"];

m.set(key1,"1")
 .set(key2,2);

m.get(key1) // "1"
m.get(key2) // 2
遍歷方法
let m = new Map([
["name","Kisn"],
["age","25"],
["job","F2E"]
])

// 遍歷Map的鍵(key)
for(let key of m.keys()){
    console.log(key)
}
// name
// age
// job

// 遍歷Map的值(value)
for(let val of m.values()){
    console.log(val);
}
// Kisn
// 25 
// F2E

// 遍歷Map的建和值
for(let item of map.entries()){
    console.log(item[0],item[1])
}
// or
for(let [key,val] of map.entries()){
    console.log(key,val);
}
// or 忽悠.entries相同
for(let [key, val] of map){
    console.log(key,val);
}

// "name" ,"kisn"
// "age","25"
// "job","F2E"
拓展運算符(...)
let m = new Map([
["name","Kisn"],
["age","25"],
["job","F2E"]
])

[...m]
// ["name","Kisn"],["age","25"],["job","F2E"]`

[...m.entries()]
// ["name","Kisn"],["age","25"],["job","F2E"]`

[...m.keys()]
// ["name","age","job"]

[...m.values()]
//["Kisn","25","F2E"]
我們可以利用Map數據結構的map方法和filter做了什么?
let m = new Map([
    ["name","Kisn"],
    ["age","25"],
    ["job","F2E"]
])

// 篩選出`key!=="age"`的鍵值對生成一個新的Map數組
let m2 = new Map(
    [...m].filter([(key,val])=> key !=="age")
)

// 循環`m`,形成一個的數據
let m3 = new Map(
    [...m].map(([k,v]) => [`${k}:`,v] )
)
參考

ES6-Set&Map

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106075.html

相關文章

  • RAINBOND源碼構建JAVA項目配置MAVEN倉庫

    摘要:清除構建緩存為每一個服務的構建環境提供緩存,項目會對的安裝目錄,配置目錄,和本地倉庫目錄提供了緩存,用戶通過以下設置清理緩存。本文檔詳細介紹了源碼構建項目時的各種詳細設置與操作。 概述 根據大量的Rainbond用戶反饋,我們發現在Rainbond源碼構建java-maven項目的過程中,最容易出現問題的一環就是獲取構件失敗。 比如: [ERROR] Failed to execute...

    MockingBird 評論0 收藏0
  • 前端筆記(四) ES6常用語法

    摘要:函數更好的尾遞歸優化實現傳入類數組對象且每次的值在改變。尾遞歸實現改寫一般的遞歸函數確保最后一步只調用自身。返回一個遍歷器對象用循環遍歷。和循環它是一種遍歷器接口為各種不同的數據結構提供統一的訪問機制。 解構賦值 //數組的解構賦值 let [a, b, c] = [1, 2, 3]; a // 1 b // 2 c // 3 let [a, [[b], c]] = [1, [[2]...

    church 評論0 收藏0
  • 玩轉 React【第02期】:戀上 React 模板 JSX

    摘要:今天我們來看一種優雅的編寫的代碼的一種方式。有了之后,可以幫助我們在編寫模板的時候結構更加簡單清晰。以上是筆者歸納總結,如有誤之處,歡迎指出。 showImg(https://segmentfault.com/img/bVbiT3u?w=900&h=383);往期回顧 前文中我們講解了利用 ReactElement 來編寫React程序,但是我們也看到這種方式編寫 React 特別的麻...

    ivydom 評論0 收藏0
  • golang學習筆記(一)——golang基礎和相關數據結構

    摘要:小白前端一枚,最近在研究,記錄自己學習過程中的一些筆記,以及自己的理解。此外,結構體也支持嵌套。在函數聲明時,在函數名前放上一個變量,這個變量稱為方法的接收器,一般是結構體類型的。 小白前端一枚,最近在研究golang,記錄自己學習過程中的一些筆記,以及自己的理解。 go中包的依賴管理 go中的切片 byte 和 string go中的Map go中的struct結構體 go中的方...

    lyning 評論0 收藏0
  • 《廖雪峰JavaScript-快速入門》筆記

    摘要:文章內容來源廖雪峰快速入門賦值注釋數據類型不區分整數和浮點數,統一用表示。條件判斷使用來進行條件判斷。最新的規范引入了新的數據類型,是一組鍵值對的結構,具有極快的查找速度。一個數組實際上也是一個對象,它的每個元素的索引被視為一個屬性。 文章內容來源:廖雪峰JavaScript-快速入門 賦值 var x = 1; 注釋 // comment /* comment */ 數據類型 Num...

    caozhijian 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<