ES6--Set之再理解
Set
其实2016年就看过阮大神的ECMAScript 6 入门,当时看了Set之后,大致看懂了,但事实上根本没有理解Set到底是什么,所以更记不住,平时做项目大多用到的还是ES5的传统写法,以至于始终觉得Set很神秘。
上上周闲来无事,翻了翻《数据结构与算法JavaScript描述》,第9章讲的是集合,很好理解,跟高中数学课上学的集合差不多,可以存一些数据,但是集合中的每个元素都是唯一的(不重复),然后就是交集、并集、补集、全集、子集的一些概念,都很好理解。
今天又回过头来看阮神的ES6入门Set,突然恍然大悟!原来神秘的Set,其实就是集合而已!JS中也原生实现了这种数据结构!哈哈哈哈哈
知识点
下面简单梳理记录主要知识点,不完善之处后续慢慢补充。
- Set类似于数组,其成员的值唯一
- Set是一个构造函数,用来生成Set数据结构。就像Array是个构造函数一样
- Set函数可以接受
具有iterable接口的其他数据结构作为参数,用来初始化 - 在Set内部,两个NaN是相等的,不能重复add
- 向Set加入值的时候,不会进行类型转换,所以
5和"5"是两个不同的值。
PS:
Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。
初始化Set的一些代码示例
// 示例一
const set = new Set([1, 2, 3, 2, 4, 5, 3, 4, 6]);
[...set]
// [1, 2, 3, 4, 5, 6]
// 示例二
const set = new Set(document.querySelectorAll('div'));
set.size // 11
// 类似于
const set = new Set();
document.querySelectorAll('div').forEach(div => set.add(div));
set.size // 11
// 数组去重
[...new Set([3, 2, 5, 3, 1, 6, 2, 7])] // [3, 2, 5, 1, 6, 7]
Set 实例的属性和方法
属性:
Set.prototype.constructor:构造函数,默认就是Set函数Set.prototype.size:返回Set实例的成员总数
操作方法(用于操作数据):
add(value):添加某个值,返回Set结构本身delete(value):删除某个值,返回一个布尔值,表述删除是否成功has(value):返回一个布尔值,表示该值是否为Set的成员clear():清除所有成员,没有返回值
代码示例如下:
let s = new Set();
s.add(1).add(1).add(2).add(3);
s.size; // 3
s.has(1) // true
s.has(2) // true
s.has(4) // false
s.delete(2) // true
s.clear()
ps: Array.from方法可以将Set 结构转为数组(Array.from方法用于将两类对象转为真正的数组:类数组对象和可遍历对象)
实现数组去重
function dedupe(array) {
return Array.from(new Set(array))
}
遍历方法(用于遍历成员):
keys():返回键名的遍历器values():返回键值的遍历器entries():返回键值对的遍历器forEach():使用回调函数遍历每个成员
PS:Set的遍历顺序就是插入顺序。这个特性有时非常游泳,比如使用Set保存一个回调函数列表,调用时就能保证按照添加顺序调用。
未完待续。。。。。。
ES6--Set之再理解的更多相关文章
- ES6之let(理解闭包)和const命令
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
- JavaScript es6 class类的理解。
本着互联网的分享精神,在本篇文章我将会把我对JavaScript es6 class类的理解分享给大家. JavaScript 类主要是 JavaScript 现有的基于原型的继承的语法糖. 类语法 ...
- SVM问题再理解与分析——我的角度
SVM问题再理解与分析--我的角度 欢迎关注我的博客:http://www.cnblogs.com/xujianqing/ 支持向量机问题 问题先按照几何间隔最大化的原则引出他的问题为 上面的约束条件 ...
- 再理解HDFS的存储机制
再理解HDFS的存储机制 1. HDFS开创性地设计出一套文件存储方式.即对文件切割后分别存放: 2. HDFS将要存储的大文件进行切割,切割后存放在既定的存储块(Block)中,并通过预先设定的优化 ...
- SpringBoot-04-自动配置原理再理解
4. 自动配置原理再理解 配置文件到底能写什么?怎么写?SpringBoot官方文档有大量的配置,但是难以全部记住. 分析自动配置原理 官方文档 我们以HttpEncodingAutoCo ...
- [每日一题]面试官问:谈谈你对ES6的proxy的理解?
[每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- ES6系列-什么是ES6?新手应该怎么理解
ECMAScript 是什么 很多初学者都很困惑,ECMAScript是什么?它跟JavaScript有什么关系? 大家注意到了吗?从题目中我们就可以看出来了,ECMAScript是JavaScrip ...
- Community Value再理解
其实之前写“从香港机房引入google/bitbucket路由”的时候,对community value的了解还并不深入,对Juniper default BGP export/import poli ...
- Python无类再理解--metaclass,type
上次理解过一次,时间久了,就忘了.. 再学习一次.. http://blog.jobbole.com/21351/ ======================= 但是,Python中的类还远不止如此 ...
- 用grunt进行ES6转换,再用uglify压缩所有js实例
1.首先安装node.js 去官网下载exe执行文件安装即可,安装完成后自带有npm管理. 2.安装grunt CLI 在项目根文件夹下执行如下代码: npm install -g grunt-cli ...
随机推荐
- 为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮
我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异. 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为"SAP&qu ...
- 2018.11.24 struts2中的OGNL表达式及两者的结合
OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...
- JavaScript内存管理
低级语言,比如C,有低级的内存管理基元,想malloc(),free().另一方面,JavaScript的内存基元在变量(对象,字符串等等)创建时分配,然后在他们不再被使用时"自动" ...
- JNI 和 socket api
1.JavaVM 和 JNIEnvJNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程 ...
- 访问oracle数据库
如果是本地 :sqlplus system/xxx(用户名/密码) 远程到服务器, sqlplus system/xxx(用户名/密码) @IP:port/orcl(orcl为数据库实例)
- CALayer简介(转)
一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮,一个文本标签,一个文本输入框,一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全 ...
- 嵌入式:FreeRTOS的使用(未完)
为了方便与UCOS对比,顺序按照UCOS那篇编写. 0.一些移植.系统相关 1.框架写法(个人习惯相关) 1-1.main 函数里创建一个开始任务 int main(void) { 初始化外设 xTa ...
- iOS实现电话状态监听 CoreTelephony
在程序中如果需要监听电话状态,可以引入CoreTelephony框架,这个框架包含了电话相关的API,可以实现监测来电,查看运营商信息等功能.下面就是具体的实现监测来电的代码.一定要把center写成 ...
- zepto 基础知识(5)
81.width width() 类型:number width(value) 类型:self width(function(index,oldWidth){....}) 类型:self 获取对象集合 ...
- 移动设备HTML5页面布局
在HTML5标准添加的新元素中,用于常见页面结 构的包括header footer footer nav aside aside article section hgroup . 下面简单介绍一下这个 ...