详解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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
Javascript学习笔记二 之 变量
Dec 15 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
jQuery的slideToggle方法实例
May 07 Javascript
jQueryMobile之Helloworld与页面切换的方法
Feb 04 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
easyui-datagrid开发实践(总结)
Aug 02 Javascript
label+input实现按钮开关切换效果的实例
Aug 16 Javascript
JS代码优化的8点建议
Feb 04 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
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
Vue快速实现通用表单验证功能
2019/12/05 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
用python写测试数据文件过程解析
2019/09/25 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
中考冲刺决心书
2014/03/11 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
个人作风建设总结
2014/10/23 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
薪资证明范本
2015/06/19 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL