详解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 相关文章推荐
JavaScript 在线压缩和格式化收藏
Jan 16 Javascript
javascript 继承实现方法
Aug 26 Javascript
jQuery第三课 修改元素属性及内容的代码
Mar 14 Javascript
javascript中的对象创建 实例附注释
Feb 08 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
Jun 08 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
用ES6写全屏滚动插件的示例代码
May 02 Javascript
JS运算符优先级与表达式示例详解
Sep 04 Javascript
vue移动端下拉刷新和上滑加载
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
php 破解防盗链图片函数
2008/12/09 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
jQuery设计思想
2017/03/07 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
python如何对实例属性进行类型检查
2018/03/20 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
授权委托书格式
2014/07/31 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
MySql数据库触发器使用教程
2022/06/01 MySQL