ES6中Set和Map数据结构的简单讲解_javascript技巧

来源:脚本之家  责任编辑:小易  
目录
SetMap总结

Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();

[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));

for (let i of s) {
  console.log(i);
}
// 2 3 5 4

上面代码通过add()方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。

去除数组的重复成员

[...new Set('ababbc')].join('')
// "abc"

向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。

Set 实例的属性和方法 Set 结构的实例有以下属性。

Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Set实例的成员总数。

Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。

Set.prototype.add(value):添加某个值,返回 Set 结构本身。
Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
Set.prototype.clear():清除所有成员,没有返回值。

s.add(1).add(2).add(2);
// 注意2被加入了两次

s.size // 2

s.has(1) // true
s.has(2) // true
s.has(3) // false

s.delete(2);
s.has(2) // false

Array.from方法可以将 Set 结构转为数组。

const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);

这就提供了去除数组重复成员的另一种方法。

function dedupe(array) {
  return Array.from(new Set(array));
}

dedupe([1, 1, 2, 3]) // [1, 2, 3]

遍历操作

Set 结构的实例有四个遍历方法,可以用于遍历成员。

Set.prototype.keys():返回键名的遍历器
Set.prototype.values():返回键值的遍历器
Set.prototype.entries():返回键值对的遍历器
Set.prototype.forEach():使用回调函数遍历每个成员
需要特别指出的是,Set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用。

附:应用场景

1.数组去重

var arr = [1, 2, 3, undefined,undefined,null,null, NaN, 1, 2, 3, NaN],
    set = new Set(arr);
console.log([...set]); 

2. 数组去重后的实现映射数组

set实例本身没有map,filter等数组属性

let set = new Set([1,2,3,4,5,6,7]);
let set2 = new Set([...set].map(value => value * 2));

let set = new Set([1,2,3]);
let set1 = new Set(Array.from(set, vlaue=>value * 2));

数组去重后,过滤返回新的数组

let set = new Set([1,2,3,4,5,6,7,1,2,3]);
let set2 = new Set([...set].filter(x => (x%2) == 0));

Map

JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

const map = new Map([
  ['name', '张三'],
  ['title', 'Author']
]);

map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"

和Set 对比

Map.prototype上的clear()、has()、size、delete()方法与Set.prototype上相同;唯一不同的是,Set是不存在键名的,键值与键名相同,所以没有get和set的方法,只有add方法;而Map具有键名和键值,所以对应set和get方法;

总结

到此这篇关于ES6中Set和Map数据结构的文章就介绍到这了,更多相关ES6 Set和Map数据结构内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:ES6学习笔记之Set和Map数据结构详解ES6教程之for循环和Map,Set用法分析一文搞懂ES6中的Map和SetES6学习笔记之map、set与数组、对象的对比ES6新特性五:Set与Map的数据结构实例分析详解ES6中的Map与Set集合ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解ES6中Set和Map用法实例详解

  • 本文相关:
  • array.prototype.slice.apply的使用方法
  • 微信小程序授权登录及解密unionid出错的方法
  • layer.open关闭父窗口 以及调用父页面的方法
  • 基于jstree的无限级树json数据的转换代码
  • ajax同步与异步传输的示例代码
  • 基于javascript显示当前时间以及倒计时功能
  • javascript实现外溢动态爱心的效果的示例代码
  • javascript 异常处理 详解
  • 小程序中英文混合排序问题解决
  • js简单实现表格排序功能示例
  • ES6新数据结构Map功能与用法示例
  • ES6中如何使用Set和WeakSet
  • JavaScript中 ES6变量的结构赋值
  • ES6入门教程之Array.from()方法
  • ES6基础之解构赋值(destructuring assignment)
  • 详解ES6通过WeakMap解决内存泄漏问题
  • JS集合set类的实现与使用方法示例
  • js数组去重的方法汇总
  • JavaScript数组去重由慢到快由繁到简(优化篇)
  • 其实你可以少写点if else与switch(推荐)
  • JS实现数组去重方法总结(六种方法)
  • JavaScript数组去重的几种方法
  • js数组去重的N种方法(小结)
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascriptjavascript技巧es6学习笔记之set和map数据结构详解es6教程之for循环和map,set用法分析一文搞懂es6中的map和setes6学习笔记之map、set与数组、对象的对比es6新特性五:set与map的数据结构实例分析详解es6中的map与set集合es6中set和map数据结构,map与其它数据结构互相转换操作实例详解es6中set和map用法实例详解array.prototype.slice.apply的使用方法微信小程序授权登录及解密unionid出错的方法layer.open关闭父窗口 以及调用父页面的方法基于jstree的无限级树json数据的转换代码ajax同步与异步传输的示例代码基于javascript显示当前时间以及倒计时功能javascript实现外溢动态爱心的效果的示例代码javascript 异常处理 详解小程序中英文混合排序问题解决js简单实现表格排序功能示例js删除数组里的某个元素方法js刷新页面方法大全js中settimeout()的用法详解js页面跳转常用的几种方式js截取字符串常用方法详细整理js数组与字符串的相互转换方法js保留两位小数方法总结js设置cookie、读取cookie、删除cookiejs打开新窗口的2种方式js 将json字符串转换为json对象的方法解析原生js实现可兼容pc和移动端的拖动滑块功能详解【测试可用】使用开源工具制作网页验证码的方法小程序开发中如何使用async-await并封装公共异步请求的方法js瀑布流布局的实现javascript实现一个数值加法函数js+css3制作时钟特效怎样使你的 javascript 代码简单易读(推荐)javascript中省略元素对数组长度的影响json是什么?有哪些优点?json和xml的区别?javascript实现弹出窗口效果
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved