详解ES6中的 Set Map 数据结构学习总结


Posted in Javascript onNovember 06, 2018

ES6中的 Set 数据结构

ES6 新增了一种 Set 数据结构。它类似数组。 最重要的一点是 Set中的结构成员没有重复的, 可用这点 一行代码实现数组去重。 Set 本身是一个构造函数。通过 new Set() 来创建Set结构。

let arr1 = ['Hello', 'World', 'ES6']
  let set1 = new Set() 
  arr1.forEach(type => {
    set1.add(type)
  })

通过new Set创建一个Set结构。 forEach 遍历arr1数组。把每一项通过Set.prototype.add 方法向Set结构中添加成员。

Set 也可以接受一个数组作为参数。

let arr2 = [1,2,3,4,1,5,2]
  let set2 = new Set(arr2) 
  for (let type of set2) {
   console.log(type)
  }
  // 1
  // 2
  // 3
  // 4
  // 5

上面的new Set() 创建 Set 数据结构时, 将一个数组作为它的参数。最后通过 for of 遍历 set2。因为 结构成员没有重复, 所以打印 1 2 3 4 5

Set 接受的参数不会进行 类型转换 , new Set(5, '5') 这完全是两个值。

Set 实现数组去重

// 方法1 
  [...new Set([1,2,3,1,2])] // 1 2 3
  
  // 方法2
  Array.from(new Set([1,2,3,1,2])) // 1 2 3

都是通过向 new Set() 中传入一个数组, 利用 Set结构成员都是唯一的特性, 最后通过扩展运算符..., 或者ES6提供的一种将类数组转换为数组的方法 Array.from()。

Set 操作方法

  • Set.prototype.add(value) 向Set结构中添加一名成员, 返回值为Set结构
  • Set.prototype.delete(value) 删除一名成员, 返回值为布尔值。 true成功, false失败
  • Set.prototype.has(value) Set 成员是否存在, true为存在, false为不存在
  • Set.prototype.clear() 清空所有的成员
let arr3 = [7,8,9]
  let set3 = new Set(arr3)
  set3.add(10)
  set3.size() // 4
  set3.delete(8)
  set3.size() // 3
  set3.clear() // 0

Set 遍历方法

  • keys() 键名的遍历器
  • values() 键值的遍历器
  • entries() 键值对的遍历器,以数组形式返回
let arr4 = ['javascript', 'vue', 'node.js', 'typescript']
  let set4 = new Set(arr4) 
  
  // set.keys()
  for (let k of set4.keys()) {
   console.log(k)\
   // javascript
   // vue 
   // node.js
   // typescript
  } 

 // set.values()
 for (ket v of set4.values()) {
  console.log(v)
  // 和上面的set4.keys() 遍历的结果一样
 } 

 // set.entries()
 for (let e of set3.entries()) {
  console.log(e)
  // ['javascript', 'javascript']
  // ['vue', 'vue']
  // ['node.js', 'node.js']
  // ['typescript', 'typescript']
 }

可见, keys()和values() 遍历是一模一样的, 以后遍历使用keys()还是values()没有区别。entries 遍历返回的是数组, 分别是keys() values()结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
jQuery使用height()获取高度需要注意的地方
Dec 13 Javascript
在JavaScript中处理时间之getHours()方法的使用
Jun 10 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
快速解决js开发下拉框中blur与click冲突
Oct 10 Javascript
JQuery validate 验证一个单独的表单元素实例
Feb 17 Javascript
详谈jQuery中的一些正则匹配表达式
Mar 08 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
May 01 Javascript
js根据后缀判断文件文件类型的代码
May 09 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 Javascript
小程序实现页面顶部选项卡效果
Nov 06 #Javascript
Vue常用的几个指令附完整案例
Nov 06 #Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
Nov 06 #Javascript
100行代码实现一个vue分页组功能
Nov 06 #Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 #Javascript
Vue递归实现树形菜单方法实例
Nov 06 #Javascript
electron中使用bootstrap的示例代码
Nov 06 #Javascript
You might like
MYSQL数据库初学者使用指南
2006/11/16 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python 调用有道api接口的方法
2019/01/03 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
python 实现端口扫描工具
2020/12/18 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
存储过程的优点有哪些
2012/09/27 面试题
工厂门卫岗位职责
2013/11/25 职场文书
总经理助理职责
2014/02/04 职场文书
《称象》教学反思
2014/04/25 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
2016年国陪研修感言
2015/11/18 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android
Django中celery的使用项目实例
2022/07/07 Python