es6之set和map
1.set
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值,set本身就是构造函数,所以可以通过new的方式来创建对象
// 例一 可以做数组去重用
var set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
那么set内部是怎么判断两个数据相不相等呢?使用的算法叫做“Same-value equality”,它类似于精确相等运算符(===),所以 5 和 '5'是不同的,它和(===)唯一的不同就是它认为NaN是同一个值,是相等的。
Array.from方法可以将Set结构转为数组。这里就刚好提供了数组的去重方法
function dedupe(array) {
return Array.from(new Set(array)); //将set结构转化为数组
}
dedupe([1, 1, 2, 3]) // [1, 2, 3] 传入数组返回一个去重的数组
set的属性和方法
- Set.prototype.constructor:构造函数,默认就是set函数
- Set.prototype.size:返回成员总数
- add(value):添加值,返回Set对象本身
- delete(value):删除值,返回布尔值,是否删除成功
- has(value):是否存在某个值,返回布尔值
- clear():清空所有成员
- keys():返回键名
- values():返回键
- entires():返回键值对
- forEach():使用回调函数遍历每个成员
//操作数据类方法
s.add(1).add(2).add(2);
// 注意2被加入了两次 s.size // s.has(1) // true
s.has(2) // true
s.has(3) // false s.delete(2);
s.has(2) // false
操作数据类方法
//遍历方法
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"]
} let set = new Set([1, 2, 3]);
set.forEach((value, key) => console.log(value * 2) )// 2 4 6
遍历方法
set应用
//扩展运算符(...)内部使用for...of循环,就可以去除数组的重复成员。
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)]; // [3, 5, 2]应用1,数组去重
//map和filter也可以用于set中了 let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set结构:{2, 4, 6} let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// 返回Set结构:{2, 4}应用2,set和map、filter
//因此使用Set可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)。 let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]); // 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4} // 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3} // 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}应用3,实现交、并、差集
2.map
ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
对象作为参数
var map = new Map();
map.set({p}, 555);
map.get({p}) // undefined
//虽然都是{p},但是map储存的是地址,他们代表的是两个不同对象
数组作为参数
var m = new Map([
[true, 'foo'],
['true', 'bar']
]); m.get(true) // 'foo'
m.get('true') // 'bar'
//这里的两个键的类型不同哦,所以得到的值也会不同
同一个键多次赋值将会覆盖
let map = new Map(); map
.set(1, 'aaa')
.set(1, 'bbb'); map.get(1) // "bbb"
//后面的赋值会覆盖前面的赋值
未知键的值返回undefined
new Map().get('asfddfsasadf')
其他 NaN -0和+0,在map里将视为是同一值
map的属性和方法
size属性返回Map结构的成员总数。- set(key, value ) 设置key所对应的键值,如果已经有键值那么就会更新
- get(key) 获取key所对应的键值,找不到就会返回undefined
- has(key) 是否存在这个键,返回布尔值
- delete(key) 删除这个键,返回true则成功,false则不成功
- clear() 清除所有成员方法
遍历方法
keys():返回键名的遍历器。values():返回键值的遍历器。entries():返回所有成员的遍历器。forEach():遍历Map的所有成员。
注:需要特别注意的是,Map的遍历顺序就是插入顺序。
es6之set和map的更多相关文章
- 前端笔记之React(六)ES6的Set和Map&immutable和Ramda和lodash&redux-thunk
一.ES6的Set.Map数据结构 Map.Set都是ES6新的数据结构,都是新的内置构造函数,也就是说typeof的结果,多了两个: Set 是不能重复的数组 Map 是可以任何东西当做键的对象 E ...
- 深入理解ES6之—set与map
Set是无重复值的有序列表.Set会自动移除重复的值,因此你可以使用它来过滤数组中重复的值并返回结果. Map是有序的键值对,其中的键允许是任何类型. Set和Map是es6新增的两个数据集合. Se ...
- ES6新增的数据类型Map和Set。
Javascript的默认对象表示方式 {} ,即一组键值对. 但是Javascript的对象有个小问题,就是键必须是字符串.但实际上Number或者其他数据类型作为键也是非常合理的. 为了解决这个问 ...
- ES6中Set 和 Map用法
JS中Set与Map用法 一.Set 1.基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. ...
- es6入门set和map
ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. var set = new Set([1, ...
- ES6,新增数据结构Map的用法
Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是”字符串-值“对,属性只能是字符串,如果传个对象字面量作为属性名,那么会默认把对象转换成字符串,结果这个属性名就变成 ...
- ES6学习笔记之map、set与数组、对象的对比
ES6 ES5中的数据结构,主要是用Array和Object.在ES6中主要新增了Set和Map数据结构.到目前为止,常用的数据结构有四种Array.Object.Set.Map.下面话不多说了,来一 ...
- ES6系列_12之map数据结构
1.map数据结构出现的原因? JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制.为了能实现将对象作为键 ...
- es6的Set和Map数据结构
Set 和 Map 数据结构 Set WeakSet Map WeakMap Set § ⇧ 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set ...
随机推荐
- 删除项目中的.svn信息
有时候我们新开发一个项目时,会将以前的项目从svn上down下来,然后复制一份.这样就会有个问题,项目中的svn信息就会一直存在.下面介绍删除方法: 1.新建一个.txt的文档.然后将下面代码粘贴到文 ...
- Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密
本期内容 : UpdateStateByKey解密 MapWithState解密 Spark Streaming是实现State状态管理因素: 01. Spark Streaming是按照整个Bach ...
- 特殊js事件
1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQ ...
- asp.net调用存储过程详解
摘要 存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 关键词 ASP.NET:存储过程 在使用 ...
- Eclipse 4.2 (Juno) 'Cannot create a server using the selected type' in Tomcat 7 - Stack Overflow.html
[太神奇了,真的可以呀] 原文:http://stackoverflow.com/questions/13423593/eclipse-4-2-juno-cannot-create-a-server- ...
- 使用php技术实现无刷新的上传文件
- JavaScript 数组 length 属性获取数组长度或设置数组元素的数目
JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性 ...
- SQL Server 的数据表简单操作
--创建数据表--[use 要创建数据表的数据库名称go]create table 要创建的表名(字段名 数据类型[长度] [null | not null] [primary key],... .. ...
- Backbone入门讲解
Backbone是一个实现了web前端mvc模式的js框架. 一种解决问题的通用方法,我们叫做模式. 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书.设计模式是一种思想. 框架模 ...
- opengl
基于OpenGL ES的GLfixed类型使用 OpenGL ES中引入了GLfixed类型.这个类型一般被定义为int,32位.高16位表示整数部分,低16位表示小数部分.由于其整数部分和小数部分所 ...