Set和Map数据结构。

栏目: 数据库 · 发布时间: 5年前

内容简介: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():使用回调函数遍历每个成员。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective Modern 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++ 简体中文版》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具