set和map去重調用什么方法_【ES6】Set、Map

Set

Set 是 ES6 提供給我們的構造函數,能夠造出一種新的存儲數據的結構

特點:只有屬性值沒有屬性名,成員值唯一

用途:可以轉成數組,其本身具備去重(自動去重),交集,并集,差集的作用等

參數必須具備迭代接口,只要原型上存在Symbol(Symbol.iterator)屬性就說明具備迭代接口,如:數組、字符串、arguments、NodeList

Set.add()

向 Set 對象中添加數據

Set 自動去重

Set.delete()

刪除 Set 對象中對應的值,如果要刪除數組等值,必須提前將數組設置為變量添加入 Set 對象

Set.clear()

清空 Set 對象中的值

Set.has()

判斷 Set 對象中是否含有對應值

Set.forEach()????&&????for of

Set.forEach()遍歷 Set 對象:

ES6新增 for of 遍歷 Set 對象:

能被 for of 遍歷的同樣得具備迭代接口

Set 操作數組

將數組轉換為 Set 對象:

將 Set 對象轉換為數組:Array.from()

該方法能夠將類數組和所有具備迭代接口的數據轉換為數組

... 展開運算符

... 運算符同樣能夠拓展數組或任何具備迭代接口的數據

使用 Set 進行數組去重

Set 在去重方便相當的老道,如果瀏覽器支持,則盡量使用 Set 進行去重

使用?Set 進行取并集

使用 Set 進行取交集

使用 Set 進行取差集

但是要注意的是,如果數據量很大,是不在前端進行處理的,通常交給后臺處理。

Map

Map 是 ES6 提供給我們的構造函數,能夠造出一種新的存儲數據的結構,本質上是鍵值對的集合。

特點:key 對應 value,key 和 value 唯一,任何值都可以當屬性

用途:讓對象作為屬性,去重

原理:鏈接鏈表、hash 算法、桶

Map.set()

Map 最大的特點即可以將對象作為屬性

向 Map 中添加屬性

Map.get()

從 Map 中取值

值得注意的是,Map 與 Set 相同,對引用值進行取值必須先使用變量存儲引用值,再使用變量添加到 Map 上,即可通過變量取到對應值。

Map.delete()

從 Map 對象中刪除數據

Map.clear()

將 Map 對象清空

Map.keys()

取出 Map 對象的所有屬性,方便對全部的值進行遍歷

Map.forEach()????&&????for of

Map 對象也同樣能夠使用 forEach 和 for of 進行遍歷

Map.forEach():

for of:

需要注意的是,for of 中取出的 Map 對象的 val 為 包含一對鍵值對的數組,可以通過 val [0] 和 val [1] 來去對應值

Map.has()

判斷 Map 對象中是否含有對應屬性

總結一下Map:不重復,key 和 value 唯一,相同的值后來的會覆蓋前面的

可以接受的值有 字符串 對象 NaN null [ ] function () {} number

擁有一系列方法 set get delete has clear

Map 原理及實現

Map 對象可以看做是一個桶,給桶中劃分幾個對象用于存放數據的鏈表

初始化桶 init ()

先把這個桶初始化,桶里面默認劃分8個對象用于存儲

hash 算法?makeHash ()

為了使桶中的單一鏈表不出現太長的情況,需要設計一個 hash 算法對放入 Map 的桶中的元素分配不同的 hash 值進行分類。如果采用該方式后鏈表還是太長則只能考慮增加桶中的對象個數

存儲更新數據方法 set ()

處理完數據的存儲之后就剩 Map 對象上的一些方法了,首先看一下存儲更新數據的方法 set

首先將要存入的數據的屬性名使用 hash 算法得到一個 hash 值,用 hash 值選擇到 Map 的桶中將要存入的對應的對象。然后對要存入的數據進行分析,如果鏈表中不存在該數據,則將該數據添加到鏈表末端。如果數據已存在,則直接替換對應的 value 值進行數據更新。

獲取數據方法 get ()

相同的值通過 hash 算法算出的 hash 值一定是相同的,所以從 Map 對象中取數據也先將所要取的數據的屬性名通過 hash 算法算出所對應的鏈表,通過鏈表中的 next 屬性對鏈表進行遍歷,最終實現獲取對應的數據

刪除數據方法 delete ()

刪除方法主要實現的是從鏈表中刪除一個節點時,將前一個節點的 next 屬性指向原本的下一個節點。

查找數據方法 has ()

與 get 方法大致相同

清除數據方法 clear ()

這里直接初始化一個桶完事簡單粗暴。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533476.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cygwin 編譯 android vlc,Cygwin?編譯?VLC?問題

Cygwin 編譯 VLC遇到了這么多問題,不過還好最后編譯過去了。問題1:gcc -mno-cygwin -Wsign-compare-Wall -mms-bitfields -pipe -o libaccess_output_dummy_plugin.dll-g-shared -u _vlc_entry__0_8_6 -L/usr/win32/liblibaccess_output_dummy_plugin.a …

kvm上添加萬兆網卡_爛泥:為KVM虛擬機添加網卡

本文首發于爛泥行天下。前幾篇文章介紹了有關KVM安裝虛擬機以及如何給虛擬機添加硬盤,今天我們再來介紹下有關如何給KVM虛擬機添加網卡。給KVM虛擬機添加網卡,可以分為兩種形式:圖形界面的和virsh attach-interface命令的。圖形界面的很簡單&…

android studio日歷小程序,android studio無法加載日歷界面

LayoutInflater inflater (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); //載入界面view inflater.inflate(R.layout.pumkin_calendar,null);AlertDialog.Builder ad;ad new AlertDialog.Builder(pumkinLand.this);ad.setView(view);…

gazebo 直接獲取傳感器數據_5個使傳感器更簡單的技巧

傳感器遍布地球表面和周圍空間,為世界提供數據。這些廉價的傳感器是物聯網背后的驅動力之一,也是我們社會現在面臨的數字革命。然而,連接到傳感器并從傳感器獲取數據并不總是直截了當或容易的。這里有五個提示,可以幫助工程師第一…

paylinks.php_畢業設計-基于PHP的網上購物網站系統設計

畢業設計-基于PHP的網上購物網站系統設計,共45頁,14912字,附完整的程序源代碼。包括前臺,后臺的實現,先運行phpStudyAdmin后打開dzsw/install.php摘要隨著Internet技術的發展,人們的日常生活已經離不開網絡…

com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0

如果你在開發過程中遇到了上述的Bug,基本上是JDK版本不一致造成的,指的是高版本的JDK編譯的class不能放在低版本的JDK上運行。如果是Version 52,就表示JDK8編譯的class不能運行在JDK7上,所以需要在本地安裝JDK8. 如果是Version 51…

谷歌瀏覽器怎么重發請求_Googel 瀏覽器 模擬發送請求工具--Advanced REST Client

Advanced REST Client是 Chrome 瀏覽器下的一個插件,通過它可以發送 http、https、WebSocket 請求。在 Chrome 商店下搜索 Advanced REST Client,即可找到如果搜索不到的可到CSDN 下載:1.下載插件:Advanced Rest Client2.因為最新…

鴻蒙os吃內存嗎,終于上手機!華為鴻蒙 OS 2.0 系統:128KB 內存就能跑

終于上手機!華為鴻蒙 OS 2.0 系統:128KB 內存就能跑2020-09-11 10:51:480點贊0收藏0評論9月11日消息,華為昨天下午在東莞松山湖舉辦了全球開發者大會,本次大會帶來了全新的 EMUI 11 系統和備受期待的鴻蒙 OS 2.0 操作系統&#xf…

flink 不設置水印_區分理解Flink水印延遲與窗口允許延遲的概念

link 在開窗處理事件時間(Event Time) 數據時,可設置水印延遲以及設置窗口允許延遲(allowedLateness)以保證數據的完整性。這兩者因都是設置延遲時間所以剛接觸時容易混淆。本文接下將展開討論分析“水印延遲”與“窗口允許延遲”概念及區別。水印延遲(WaterMark)(1…

愛特php文件管理器2.8_查找「超級蜘蛛池開發者中心 摳:44564876易」安卓應用 - 豌豆莢...

8.6萬人安裝開發者頭條 - 程序員分享平臺 2015 年獲「最美應用」官方推薦,程序員必裝的應用。 開發者頭條是由一群程序員創建的,我們運營了 developerWorks 的微博、微信,創建了碼農周刊,已覆蓋百萬程序員; 我們更懂程…

談華為鴻蒙內核和操作系統,談華為鴻蒙內核和操作系統

作者 | 陸首群談到華為自研鴻蒙內核和操作系統,從華為透漏出來的信息來看,有點自相矛盾、撲朔迷離!我曾說過:真真假假,虛虛實實!這里有技術原因,也有外部原因。一開始(大概是 2016 年左右)&…

彈跳機器人 桌游_MIT機器人輕松搞定桌游疊疊樂:你能玩過它算我輸 |《科學》子刊...

乾明 發自 凹非寺 量子位 報道 | 公眾號 QbitAI江湖上,一直流傳著一種疊疊樂的試煉。規則很簡單,從下方的積木中,抽一根往上搭。你能往上搭幾層?對MIT團隊研發的機器人來說,玩這個游戲基本上不費吹灰之力。而且&#x…

華為鴻蒙無人駕駛,特斯拉最大的對手竟是華為?Hicar+鴻蒙OS無人駕駛技術不再一家獨大!...

原標題:特斯拉最大的對手竟是華為?Hicar鴻蒙OS無人駕駛技術不再一家獨大!短短幾個月的時間,特斯拉的市值翻了近4倍,對于一個超級企業來說一切都顯得那么不可思議,如果把它單純的看成一家車企,恐…

new_picview_一款漂亮的圖片查看器PictureViewer

前段時間寫了一款查看妹子圖片的客戶端宅男福利妹子客戶端SuperGank,于是后來就把其中的一個圖片查看的功能封裝成了一個library,使用簡單,可以進行多項設置。先來看一眼效果圖吧!下面來看看如何使用它:首先把圖片url的…

鴻蒙系統會不會影響游戲,令人擔心,鴻蒙系統會不會讓人失望?未來難說

如今,一直被炒的沸沸揚揚的鴻蒙系統,終于在2019年8月9日發布了,次日,也就是8月10日,榮耀的智慧屏又帶著鴻蒙系統出現了一次,榮耀智慧屏也成為了首次搭載鴻蒙系統的終端,見證了中國操作系統的歷史…

buck電路上下管_推薦 | 學好電路設計與仿真?你不能錯過這兩本書籍 ~

網 友小編,有沒有 Saber 相關書籍可以推薦一下?還有,Saber 軟件下載那個版本比較好?當然有啦!小 編《Saber 電路仿真及開關電源設計》柯福波 等編著本書以 Saber 開關電源為基礎,以具體工程電路為范例&am…

html5畫電池狀態,HTML5的一個顯示電池狀態的API簡介

這篇文章主要介紹了HTML5的一個顯示電池狀態的API簡介,由Mozilla設計,具體的設備和瀏覽器支持情況還要通過檢測才能確定,需要的朋友可以參考下移動設備的份額在網絡流量中在大量增長,其所貢獻的網絡流量非常龐大,以至于為了移動設備,我們單獨…

redux異步action_react-redux--異步Action

上兩篇文章敘述的都是同步操作,每當 dispatch action 時,state 會被立即更新。但是實際應用中,我們有很多操作執行后,過一段時間,才會得到結果。那么怎么處理這種情況呢?先熟悉一個概念中間件本質就是一個通…

怎么批量修改html文件后綴,如何批量修改文件后綴名

我們都知道電腦文件都有一個格式,比如JPG、MP3等等格式,每個格式都代表不一樣文件類型,那么我們該如何批量更改文件類型的后綴呢?比如把JPG更改為MP3,只要在電腦里設置不隱藏文件擴展名,然后建立統一的文件夾&#xf…

python 怎么調用 矩陣 第幾行_第58集 python機器學習:混淆矩陣精度指標

混淆矩陣的精度計算公式為:精度(TPTN)/(TPTNFPFN),也就是說,精度就是指正確的預測數目除以所有樣本的數量。準確率、召回率與f-分數:總結混淆矩陣還有幾種方法,其中最常見的就是準確率和召回率。準確率度量的是被預測為…