成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

停止在JavaScript中將對(duì)象用作哈希映射

開(kāi)發(fā) 前端
Map是日常編程中比較常用的數(shù)據(jù)結(jié)構(gòu)之一。它保留了可以很容易地通過(guò)其鍵來(lái)訪問(wèn)的鍵值對(duì)。在Java中,使用HashMap來(lái)實(shí)現(xiàn)這個(gè)目的是很明顯的。然而,在JavaScript中,使用一個(gè)普通的對(duì)象來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)是非常方便的。

 Map是日常編程中比較常用的數(shù)據(jù)結(jié)構(gòu)之一。它保留了可以很容易地通過(guò)其鍵來(lái)訪問(wèn)的鍵值對(duì)。在Java中,使用HashMap來(lái)實(shí)現(xiàn)這個(gè)目的是很明顯的。然而,在JavaScript中,使用一個(gè)普通的對(duì)象來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)是非常方便的。

[[332917]]

 

  1. const map = {}; 
  2.  
  3. // 插入鍵值對(duì) 
  4. map['key1'] = 'value1'
  5. map['key2'] = 'value2'
  6. map['key3'] = 'value3'
  7.  
  8. // 檢查map包含的鍵 
  9. if (map.hasOwnProperty('key1')) { 
  10.   console.log('Map contains key1'); 
  11.  
  12. // 通過(guò)特定的鍵獲得值 
  13. console.log(map['key1']); 

但是JavaScript中有一個(gè)專門用于此目的的內(nèi)置數(shù)據(jù)結(jié)構(gòu):Map。讓我給你一些理由,讓你喜歡Map而不是普通的對(duì)象。

1.更多鍵類型

對(duì)象只能有符號(hào)(symbols)或字符串。Map可以將任何類型的值作為鍵:對(duì)象,函數(shù)或基元(primitives)。

 

  1. const map = new Map(); 
  2. const myFunction = () => console.log('I am a useful function.'); 
  3. const myNumber = 666; 
  4. const myObject = { 
  5.   name'plainObjectValue'
  6.   otherKey: 'otherValue' 
  7. }; 
  8. map.set(myFunction, 'function as a key'); 
  9. map.set(myNumber, 'number as a key'); 
  10. map.set(myObject, 'object as a key'); 
  11.  
  12. console.log(map.get(myFunction)); // function as a key 
  13. console.log(map.get(myNumber)); // number as a key 
  14. console.log(map.get(myObject)); // object as a key 

2.更好地確定大小

Map提供了一個(gè)size屬性,但一個(gè)普通對(duì)象的大小卻必須通過(guò)艱難的方式來(lái)確定。確定Map的大小可以在O(1)時(shí)間內(nèi)完成,而確定一個(gè)普通對(duì)象的大小則需要O(n)步。

 

  1. const map = new Map(); 
  2. map.set('someKey1', 1); 
  3. map.set('someKey2', 1); 
  4. ... 
  5. map.set('someKey100', 1); 
  6.  
  7. console.log(map.size) // 100, Runtime: O(1) 
  8.  
  9. const plainObjMap = {}; 
  10. plainObjMap['someKey1'] = 1; 
  11. plainObjMap['someKey2'] = 1; 
  12. ... 
  13. plainObjMap['someKey100'] = 1; 
  14.  
  15. console.log(Object.keys(plainObjMap).length) // 100, Runtime: O(n) 

3.更好的性能

對(duì)Map進(jìn)行了優(yōu)化,以便頻繁地添加和刪除條目。

此外,Map的條目數(shù)可以在恒定的時(shí)間內(nèi)被檢索,而一個(gè)普通對(duì)象的條目數(shù)必須被計(jì)算,這需要O(n)時(shí)間。

以我的Macbook Pro為例,這是一張有1000萬(wàn)個(gè)條目的Map的平均大小確定時(shí)間。

  • 普通JS對(duì)象: ~1.6 s
  • Map: < 1 ms

此外,它不需要將任何鍵轉(zhuǎn)換為字符串,這可以節(jié)省很多時(shí)間。

 

4.直接迭代

對(duì)象必須通過(guò)獲取鍵并對(duì)其進(jìn)行迭代。另一方面,Map是可迭代的,這意味著它可以直接迭代。

 

  1. const map = new Map(); 
  2. map.set('someKey1', 1); 
  3. map.set('someKey2', 2); 
  4. map.set('someKey3', 3); 
  5.  
  6. for (let [key, value] of map) { 
  7.   console.log(`${key} = ${value}`); 
  8. // someKey1 = 1 
  9. // someKey2 = 2 
  10. // someKey3 = 3 
  11.  
  12. const plainObjMap = {}; 
  13. plainObjMap['someKey1'] = 1; 
  14. plainObjMap['someKey2'] = 2; 
  15. plainObjMap['someKey3'] = 3; 
  16.  
  17. for (let key of Object.keys(plainObjMap)) { 
  18.   const value = plainObjMap[key]; 
  19.   console.log(`${key} = ${value}`); 
  20. // someKey1 = 1 
  21. // someKey2 = 2 
  22. // someKey3 = 3 

5.key順序

在ECMAScript 2015之前,一個(gè)對(duì)象的鍵不保證以任何特定的順序出現(xiàn)。在Map上迭代保證鍵按插入順序出現(xiàn)。

6.無(wú)鍵覆蓋

一個(gè)普通對(duì)象由于其原型已經(jīng)包含了一些鍵,你的鍵和對(duì)象已經(jīng)包含的鍵之間可能會(huì)有沖突。Map在創(chuàng)建時(shí)不包含任何鍵。

注意:自ECMAScript 2015年起,你可以通過(guò)使用 Object.create(null) 來(lái)創(chuàng)建你的普通對(duì)象圖來(lái)避免意外的鍵覆蓋。

 

  1. const map = new Map(); 
  2. map.set('someKey1', 1); 
  3. map.set('someKey2', 2); 
  4. map.set('toString', 3); // No problem for Map 
  5.  
  6. const plainObjMap = new Map(); 
  7. plainObjMap['someKey1'] = 1; 
  8. plainObjMap['someKey2'] = 2; 
  9. plainObjMap['toString'] = 3; // Oops, native property 

 

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2009-03-13 13:58:10

Javascript哈希表偽哈希表

2023-10-04 07:25:59

JavaScriptpromises

2021-06-03 10:00:47

JavaScript 前端數(shù)克隆對(duì)象

2021-02-22 06:41:35

對(duì)象AutoMapper映射

2020-04-06 20:30:37

JavaScriptBoolean開(kāi)發(fā)

2022-09-22 11:40:11

JavaScript數(shù)組開(kāi)發(fā)

2015-11-24 09:53:22

AngularJSXMLJSON

2009-04-22 09:00:55

IE8中文網(wǎng)址瀏覽器

2020-02-17 09:21:27

存儲(chǔ)數(shù)據(jù)技術(shù)

2023-12-15 15:03:54

.NETAutoMapper對(duì)象映射工具

2020-08-19 08:29:22

JavaScript 對(duì)象函數(shù)

2009-09-23 13:26:10

Hibernate對(duì)象

2023-11-21 15:23:15

JavaScript工具

2025-02-28 08:36:05

2010-07-30 10:58:03

Flex數(shù)據(jù)綁定

2018-12-19 19:30:46

JavaScript創(chuàng)建對(duì)象前端

2024-08-09 11:52:18

2021-04-20 09:09:10

Android 12GoogleVulkan API

2023-06-02 15:42:51

JavaScript數(shù)據(jù)結(jié)構(gòu)對(duì)象

2012-02-08 12:17:38

HibernateJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 综合色影院| 日韩精品一区二区三区中文字幕 | 国产午夜精品一区二区三区四区 | 成人免费视频在线观看 | 天天操一操| 4hu最新网址 | 美女福利视频一区 | 国产欧美日韩综合精品一区二区 | 阿v视频在线观看 | 亚洲高清一区二区三区 | 在线a视频网站 | 在线免费观看a级片 | 国产真实精品久久二三区 | 国产免费麻豆视频 | 成人av高清在线观看 | 91国在线视频 | 欧美久久久电影 | 欧美一区二区三区视频在线观看 | 成人在线视频免费看 | 一区二区三区四区免费视频 | 一区二区视频 | japanhdxxxx裸体| 欧美1—12sexvideos | 欧美不卡在线 | 九色国产 | 女人精96xxx免费网站p | 91免费在线 | 999久久久久久久 | 男人天堂手机在线视频 | 搞av.com| 成人午夜免费福利视频 | 日本高清视频在线播放 | 国户精品久久久久久久久久久不卡 | 伊人久久麻豆 | 奇色影视 | 久久精品在线 | 国产91在线 | 欧美 | 欧美成人猛片aaaaaaa | 欧美一区二区在线播放 | 中文字幕一区二区视频 | 特黄色一级毛片 |