内容简介:ES6提供了新的数据结构Set,它类似与数组,但是成员值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。上面代码通过add()方法向Set结构加入成员,结果表明Set结构不会添加重复的值。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结构不会添加重复的值。
Set函数可以接受一个数组作为参数,用来初始化。
//例子1 const set = new Set([1,2,3,4,4]); [...set];//[1,2,3,4] //例子2 const items = new Set([1,2,3,4,5,5,5,5]); items.size//5 //例子3 const set = new Set(document.querySelectorAll('div'));
上面代码中,例一和例二都是Set函数接受数组作为参数,例三是接受类似数组的对象作为参数。
上面代码也展示了一种去除数组重复成员的方法。
//去除数组的重复成员 [...new Set(array)] //去除字符串里面的重复字符 [...new Set('ababbc')].join('');//'abc' //下面代码向Set实例添加了两个NaN,但是只能加入一个。这表明在Set内部两个NaN是相等。 let set = new Set(); let a = NaN; let b = NaN; set.add(a); set.add(b); set // Set {NaN} //另外,两个对象总是不相等的。 let set = new Set(); set.add({}); set.size // 1 set.add({}); set.size // 2
Set实例的属性和方法
Set结构的实例有以下属性。
-Set.prototype.constructor:构造函数,默认就是set函数。 -Set.prototype.size:返回Set实例的成员总数。
Set实例的方法分为两大类:操作方法和遍历方法。下面先介绍四个操作方法。
-add(value):添加某个值,返回Set结构本身。 -delete(value):删除某个值,返回一个布尔值,表示删除是否成功。 -has(value):返回一个布尔值,表示该值是否为Set的成员。 -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
下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同。
//对象的写法 const properties ={ 'width':1, 'height':1 }; if(properties[someName]){ //do something } //Set的写法 const properties = new Set(); properties.add('width'); properties.add('height'); if(properties.has(someName)){ //do something }
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 结构的实例有四个遍历方法,可以用于遍历成员。
-keys():返回键名的遍历器。 -values():返回键值的遍历器。 -entries():返回键值对的遍历器。 -forEach():使用回调函数遍历每个成员。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据结构 – 用于构建文件系统的数据结构?
- 荐 用Python解决数据结构与算法问题(三):线性数据结构之栈
- 数据结构和算法面试题系列-C指针、数组和结构体
- 请问二叉树等数据结构的物理存储结构是怎样的?
- 数据结构——单链表
- 常用数据结构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective Modern C++ 简体中文版
Scott Meyers / 高博 / 中国电力出版社 / 2018-4-23 / 99
想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式以及并发支持)。挑战在于高效地运用这些特性——从而使你的软件具备正确性、高效率、可维护性和可移植性。这正是这本实用的图书意欲达成的定位。它描述的正是使用C++11和C++14——现代C++来撰写真正卓越的软件之道。 涵盖以下主题: 大括号初始化、noexcept规格......一起来看看 《Effective Modern C++ 简体中文版》 这本书的介绍吧!