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.mzph.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-分数:总结混淆矩阵还有几种方法,其中最常见的就是准确率和召回率。准确率度量的是被预测为…