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

不想用Object和Array存儲數(shù)據(jù),你還有Set和Map

開發(fā) 前端
許多年來,程序員們一直使用Object和Array來存儲數(shù)據(jù),這種趨勢不僅僅局限于JavaScript。除了這兩個選項外,沒有其他選擇來存儲多個值和處理數(shù)據(jù)結(jié)構(gòu)。然而,在使用Object和Array時有幾個限制。

本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)。

許多年來,程序員們一直使用Object和Array來存儲數(shù)據(jù),這種趨勢不僅僅局限于JavaScript。除了這兩個選項外,沒有其他選擇來存儲多個值和處理數(shù)據(jù)結(jié)構(gòu)。然而,在使用Object和Array時有幾個限制,例如:

  • Array可以存儲重復(fù)的元素。
  • 沒有像Array那樣找到Object長度的方法。
  • 只有字符串可以存儲在Object中,不記插入順序。
  • 開發(fā)人員必須根據(jù)用例選擇數(shù)組或?qū)ο蟆?/li>
  • 像Lodash這樣的第三方庫被用來增強數(shù)組的功能。

隨著2015年ES6的發(fā)布,情況開始好轉(zhuǎn)。ES6引入了對Map和Set的支持,旨在克服上述限制。

[[356741]]

什么是Set和Map?

如前所述,這兩個功能都是在JavaScript的ES6版本中引入的。Set是唯一元素的有序集合。“唯一元素”是最重要的,因為它意味著一個Set中不能存儲重復(fù)的元素。但是它沒有鍵-值對系統(tǒng)。

Map是Array和Object數(shù)據(jù)結(jié)構(gòu)的組合。它像Object一樣是鍵-值對的Set,但它也記住插入格式,并具有l(wèi)ength(.size)屬性。

Set的聲明和初始化:一個集合可以像這樣初始化。

  1. const set = new Set(); 

const set = new Set();

· 從Set中添加和刪除元素:你可以使用.add()方法輕松地將元素插入到集合中。

  1. const set = new Set();set.add('John');set.add('Martha')set.add('Bryan');set.add('John');//set = {'John','Martha','Bryan'} 

JavaScript中的Set借用了很多數(shù)學(xué)集合的屬性,并且只包含唯一的元素。刪除元素也非常簡單,使用.delete()方法刪除單個元素,或使用.clear()方法刪除所有元素。

  1. set.add('John');set.add('Martha')set.add('Bryan');set.delete('Martha')//set= {'John','Bryan'}set.clear(); // removes all the element 

· Set的大小:使用.size,你可以很容易地找到有用的Set的大小。

  1. set.add('a')set.add('b');set.add('c');console.log(set.size) // => 3 

· 訪問Set中的元素:Set在嘗試記錄或訪問其值時的方式不同。你可以記錄數(shù)組并查看元素,但這不適用于Set。

  1. var arr=[1,2,3];const set = new Set(arr);console.log(set) // => [objectSet]console.log(arr) // => (3) [1,2,3] 

為了訪問Set,我們需要一個SetIterator()來獲取所有的值。JavaScript提供了一個屬性.values()來獲取一個迭代器,然后我們可以將該迭代器與循環(huán)結(jié)合使用獲取所有的值。如以下代碼片段演示:

  1. var arr=[1,2,3];const set = new Set(arr);variterator=set.values()console.log(iterator.next().value) //1 

檢索所有元素更簡單的方法是使用.forEach(),如下所示:

  1. var arr=[1,2,3];const set = new Set(arr);set.forEach(v=>console.log(v)) 

輸出:

此外,你可以使用.has()方法檢查是否存在某個值,如果找到該元素,該方法將返回true。

  1. var arr=[1,2,3];const set = new Set(arr);console.log(set.has(1)); // true 

值得一提的是,盡管Set不支持鍵-值對元素,但keys()和entries()等方法對Set是可用的。

Set vs Array

Set和Array傾向于執(zhí)行和處理相同的操作,但存在一些差異。最大的區(qū)別是Set不能像Array那樣有重復(fù)項,而Set提供了一種更簡單的方法來刪除項。此外,Set的元素在插入順序上是可迭代的。

與數(shù)學(xué)集合一樣,JavaScript中的集合也可以用于執(zhí)行union和intersection等操作,這些操作可以在合并數(shù)據(jù)或在兩個Set中尋找公共元素時使用。

初始化和聲明Map:

與Set類似,Map也可以用同樣的方式聲明。

  1. const map = new Map(); 

從Map中添加和刪除元素:Map支持類似Object的鍵值對。因此,在增加價值的同時,我們也需要提供一個密鑰。這和我們在Set中看到的不一樣。

  1. const map = new Map();map.set('Name', 'iPhone'); // map.set(key,value)formatmap.set('Brand', 'Apple');map.set('Price', '$1000'); 

要從Map中刪除一個值,我們可以簡單地將鍵傳遞給.delete()屬性。

  1. const map = new Map();map.set('Name', 'iPhone'); map.set('Brand','Apple');map.set('Price', '$1000');map.delete('Price'); //removes the elementwith key 'Price' 

與Set類似,可以使用.clear()刪除所有元素。

  1. map.clear() // removes all the element 

Map的大小:使用.size可以很容易地檢索Map的大小(長度)。

  1. const map = new Map();map.set('Name', 'iPhone');map.set('Brand','Apple');map.set('Price', '$1000');console.log(map.size)//=> 3 

訪問Map中的元素:Map為我們提供了一個.get()方法,通過將鍵作為參數(shù)傳遞到方法中來快速獲取值。

  1. const map = new Map();map.set('Name', 'iPhone');map.set('Brand','Apple');map.set('Price', '$1000');console.log(map.get('Name'));//iPhoneconsole.log(map.get('Brand')); // Apple 

但是如果你只想要鍵、值,或者鍵和值都想要,該怎么辦呢?Map有.keys(),.values()和.entries()分別實現(xiàn)相同的功能。使用上面代碼中的相同Map:

  1. console.log(map.keys()); 
  2. // iterator {'Name','Brand',Price'}console.log(map.values()); 
  3. // iterator {'iPhone','Apple','$1000'}console.log(map.entries()); 
  4. //iterator {'Name':'iPhone','Brand':'Apple',Price':'$1000'} 

Map的迭代也非常簡單:

  1. //with for-each 
  2. map.forEach((value, key) => { 
  3.    console.log(`${key} is ${value} yearsold!`); 
  4. }); 
  5.  
  6.  
  7. // with for-of 
  8. for(const [key, value] of map) { 
  9.   console.log(`${key} : ${value}`); 

此外,你可以使用.has()屬性并傳遞鍵輕松地檢查元素是否存在。

  1. var map = new Map(); 
  2. map.set('age',19);console.log(map.has('age')) // true since 'age' key ispresent 

如果你決定將object轉(zhuǎn)換為map,JavaScript已經(jīng)搞定了。我們之前使用.entries()來獲取所有鍵-值對,但這次我們將使用針對Object的方法。

  1. const myObject= { 
  2.   'Age': '25', 
  3.   'Gender': 'Male', 
  4.   'Nationality': 'Australian' 
  5. }; 
  6.  
  7.  
  8. const myMap = new Map(Object.entries(myObject)); //object to mapconstanotherObject = Object.fromEntries(myMap) // map to object 

你可以輕松地將map轉(zhuǎn)換為object,如上所示。要將Map轉(zhuǎn)換為Array,可以使用array .from(myMap)。

Map vs Array &Objects

Map似乎解決了Array和Object的許多缺點,比如它能夠處理更復(fù)雜的操作。Map就像是Array和Object的混合體。它有一個類似array的size屬性,可以以鍵-值對格式存儲元素。除此之外,它還提供了.has()之類的方法來檢查元素是否存在,這可以節(jié)省大量時間。

而且,它不要求鍵必須是字符串類型。你甚至可以使用一個對象作為鍵來幫助你編寫更好的代碼。

雖然Array和Object已經(jīng)成為存儲集合和鍵-值對元素的事實上的標(biāo)準(zhǔn),但通過引入Map和Set,你可以為代碼提供一種有趣的方法。Set和Map是JavaScript提供的用于存儲復(fù)雜數(shù)據(jù)結(jié)構(gòu)的新標(biāo)準(zhǔn)。

此外,使用這些數(shù)據(jù)結(jié)構(gòu)還消除了使用第三方庫(如Lodash)的需要,因為這些新的數(shù)據(jù)結(jié)構(gòu)默認(rèn)提供了.has()和.delete()等方法。

[[356742]]

圖源:unsplash

Array和Object在任何意義上都不是過時的,不過使用Set和Map肯定是處理數(shù)據(jù)更好的方法,尤其是在構(gòu)建大型復(fù)雜應(yīng)用程序時。

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2024-11-11 17:20:52

2009-07-09 00:25:00

ScalaSet類Map類

2012-06-15 09:56:40

2024-04-02 08:50:08

Go語言react

2020-07-12 15:34:48

JavaScript開發(fā)技術(shù)

2025-01-22 09:21:46

2015-03-13 09:36:09

NULLnullptr

2021-07-16 06:56:50

授權(quán)機制Session

2020-10-22 10:55:55

數(shù)據(jù)結(jié)構(gòu)ES6前端

2021-06-25 10:18:08

JavaScript Array.map 巧技拾遺

2016-08-01 16:26:34

ES6集合

2018-07-24 09:28:18

存儲數(shù)據(jù)倉庫

2012-04-16 15:08:33

2017-10-23 15:17:42

技術(shù)業(yè)務(wù)職位

2017-08-21 21:31:16

雙活戴爾

2009-01-18 15:48:31

數(shù)據(jù)倉庫數(shù)據(jù)存儲OLTP

2024-03-04 06:37:55

TypeScript類型聲明靜態(tài)方法

2010-07-27 14:44:23

Flex Array

2022-05-18 08:17:24

Java原子變量

2022-02-09 16:02:26

Go 語言ArraySlice
點贊
收藏

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

主站蜘蛛池模板: 亚洲一区二区三区免费在线观看 | 国产丝袜一区二区三区免费视频 | 国产精品久久一区二区三区 | 婷婷综合网 | 亚洲区视频 | 中文字幕不卡在线观看 | 免费黄色成人 | 亚洲成人动漫在线观看 | 欧美成人免费在线视频 | 久久中文字幕av | 仙人掌旅馆在线观看 | 亚洲三区视频 | 日本精品一区二区三区四区 | 欧美中文字幕一区二区 | 91久久国产综合久久91精品网站 | 亚洲一区欧美 | 成人av免费| 亚洲精品欧美 | 99爱免费 | 国产精品久久精品 | 黄色一级特级片 | 999精品在线观看 | 亚洲在线 | 黑人巨大精品欧美一区二区免费 | 日韩欧美视频 | 狠狠干网 | 成人欧美一区二区三区 | 欧美激情欧美激情在线五月 | 丝袜美腿av | 欧美精品被| 免费一级毛片 | 欧美在线观看一区 | 国产精品99久久免费观看 | 视频一区中文字幕 | gav成人免费播放视频 | 亚洲电影第1页 | 99久久久久国产精品免费 | 亚洲成人精 | 日韩精品一区二 | 日韩欧美在线观看 | 久久大陆|