ES6 Set结构和Map结构(上)
Set
ES6提供了新的数据结构——Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身也是一个构造函数,用来生成Set数据结构
var s = new Set();
[2,3,5,4,5,2,2].map(x=>s.add(x))
for(i of s){
console.log(i);//2 3 5 4
}
//上面的代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值。
var set = new Set([1,2,3,4,4]);
//[1,2,3,4]
var items = new Set([1,2,3,4,5,5,5,5]);
items.size//5
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
var properties = {
"width":1,
"height":1
};
if(properties[someName]){
//do something
}
//Set的写法
var properties = new Set();
properties.add("width");
properties.add("height");
if(properties.has(someName)){
//do something
}
Array.from方法可以将Set结构转为数组
var items = new Set([1,2,3,4,5]);
var array = Array.from(items);
//这里提供了一种去除数组的重复元素的方法
function dedupe(array){
return Array.from(new Set(array));
}
dedupe([1,2,2,3]);//[1,2,3]
遍历操作
Set结构的实例有4个遍历方法,可以用来遍历成员
——keys():返回一个键名的遍历器
——values():返回一个键值的遍历器
——entries():返回一个键值对的遍历器
——forEach():使用回调函数遍历每个成员。
keys方法、values方法、entries方法返回的都是遍历器对象,由于Set结构没有键名,只有键值,或者说键名和键值相同,所以keys方法和values方法等效
let set = new Set(['red','green','blue']);
for (let item of set.keys()){
console.log(item);
}
//red
//green
//blue
for(let item of set.values()){
console.log(item);
}
//red
//green
//blue
for(let item of set.entries()){
console.log(item);
}
//['red','red']
//['green','green']
//['blue','blue']
Set结构的实例默认可遍历,其默认遍历器生成函数就是它的values方法
Set.prototype[Symbol.iterator] === Set.prototype.values //true
这就意味着可以省略values方法,直接使用for—of循环遍历Set
let set = new Set(['red','green','blue']);
for(let x of set){
console.log(x);
}
//red
//green
//blue
由于扩展运算符(...)内部使用for...of循环,所以也可以用于Set结构
let set = new Set(['red','green','blue']);
let arr = [...set];
console.log(arr);
//['red','green','blue']
这也提供了一种简便的去除数组重复元素的方法
let arr = [3,5,2,2,5,5];
let unique = [...new Set(arr)];
console.log(unique); // [3,5,2]
而且,数组的map和filter方法也就可以用于Set
let set = new Set([1,2,3]);
set = new Set([...set].map(x=> x*2));
console.log(set);//[2,4,6]
let set = new Set([1,2,3,4,5]);
set = new Set([...set].filter(x=>(x%2)==0));
console.log(set);//[2,4]
Set实现并集,交集,差集
ES6 Set结构和Map结构(上)的更多相关文章
- js-ES6学习笔记-Set结构和Map结构
http://www.cnblogs.com/lonhon/ 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set ...
- ECMAScript6之Set结构和Map结构
set数据结构 ES6提供了一个新的数据结构,Set,Set和Array数组相似,但是Set里没有重复的数据,可以说是一个值的集合. 同时,Set数据结构有以下属性和方法: size:返回成员总数 a ...
- ES6中Set 和 Map用法
JS中Set与Map用法 一.Set 1.基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. ...
- es6的Set和Map数据结构
Set 和 Map 数据结构 Set WeakSet Map WeakMap Set § ⇧ 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set ...
- ES6学习:Map结构的目的和基本用法
Map结构的目的和基本用法 JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键.这给它的使用带来了很大的限制. 1 2 3 4 5 6 7 8 ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- es6的Map结构
es6的Map结构主要解决Object的键名只能是单一属性的问题.它可以是字符串,对象,数组,等等 其中有个问题要注意一下,就是 var map = new Map(); map.set(['a'], ...
- set和map结构,class类
1.set数据结构和map数据结构: (1)set: 数据结构set(集合,无序且值不能重复的数据集合,特点是key值和value值相同,没有重复的value //1 创建set ,,]) conso ...
- 线性结构与树形结构相互转换(ES6实现)
前言 当树形结构的层级越来越深时,操作某一节点会变得越来越费劲,维护成本不断增加.所以线性结构与树形的相互转换变得异常重要! 首先,我们约定树形结构如下: node = { id: number, / ...
随机推荐
- CTSC/APIO2018 帝都一周游
day0 报道 上午早早就起来了,两点才到酒店,然后去简单试了试机子. 不得不说今年八十中的伙食变得瓜皮了啊,去年还是大叠的5元卷,今年变成了单张的*餐卷.不知道食堂吝啬什么,面条米饭都只有一点点,还 ...
- SQL注入文件读取通过from for分页读取
http://103.238.227.13:10088/?id=1 在读取文件的时候发现不能够一下子全部读取出来.经过百度学习了一下,看到别人使用from for说实在此前真不知道这操作. 先来看一下 ...
- linux子系统的初始化_subsys_initcall()【转】
转自:http://my.oschina.net/u/572632/blog/305492 目录[-] 概述 section的声明 注册 调用 IN BUILDING 概述 内核选项的解析完成之后,各 ...
- 菜鸟学习nodejs--Socket.IO即时通讯
https://blog.csdn.net/lovemenghaibin/article/details/51263774
- c++设计模式系列----builder模式
看了好几处关于builder模式的书和博客,总感觉不是很清楚,感觉不少书上的说的也不是很准确.最后还是看回圣经<设计模式>.看了好久终于感觉明白了一点了. 意图: builder模式提出的 ...
- javascript方法--call()
关于call方法,以前经常看到这个方法,但是也没怎么用心去学习,后来觉得不行,所以知识在一点一点补~ 今天对自己学习call方法做一下总结 其实,学了call方法,会发现call跟apply其实是很像 ...
- java字节码指令列表(转)
字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将i ...
- 在Redis集群中使用pipeline批量插入
在Redis集群中使用pipeline批量插入 由于项目中需要使用批量插入功能, 所以在网上查找到了Redis 批量插入可以使用pipeline来高效的插入, 示例代码如下: Pipeline p = ...
- DBUtile
DBUtils是Python的一个用于实现数据库连接池的模块. 模式: - 每个线程创建一个连接,关闭(默认不关闭),线程终止时,才关闭连接. - 创建共享连接池 应用:只要写原生SQL,用户数据框连 ...
- BestCoder Round #85 前三题题解
sum Accepts: 822 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...