es6 入门(四):Set和Map数据解构
来源:互联网 发布:适合家政的软件 编辑:程序博客网 时间:2024/06/14 00:30
1、Set 是es6提出的一种数据解构,类似于数组,但是与数组有一个很大的区别:Set中的数据是没有重复的,也就是说所有的值都是唯一的。
针对这一特性可以用set对数组进行去重。如:
const s = new Set();[2, 3, 5, 4, 5, 2, 2,8].forEach(x => s.add(x));for (let i of s) { console.log(i);}// 2 3 5 4 8let arr = Array.from(new Set([1,2,4,6,3,6,3,7,4]));for(let i=0;i<arr.length;i++){console.log(i); // 1 2 4 6 3 7Set去重是采用 ===(全等) 方式进行判断的,不存在类型转换 也就是说1与'1'是不同的。在es6入门(三)点击打开链接 中介绍过,NaN是一种特殊的数字类型,自身都不相等。但是在es6的Set中NaN是与自身相等的。也就是说向Set中可以有重复的NaN出现,对象也是一样。
let set = new Set();set.add(1);set.size;//1set.add('1');set.size;//2set.add(NaN);set.size;//3set.add(NaN);set.size;//3set.add({});set.size;//4set.add({})set.size;//5
2、Set方法的介绍:(a):操作方法:add()、has()、delete()、clear()
let s = new Set();s.add(1).add(3).add(2);// 注意2被加入了两次s.size // 3s.has(1) // trues.has(2) // trues.has(3) // trues.delete(2);s.has(2) //false(b)遍历方法:键名:keys()、键值:values()、键值对entries()、遍历所有成员foreach()
在Set数据解构中,只存在键值,不存在键名,也可以理解为键值和键名是相等的。
let set = new Set(['red', 'green', 'blue']);for (let item of set.keys()) { console.log(item);}// red、green、bluefor (let item of set.values()) { console.log(item);}// red、 green、bluefor (let item of set.entries()) { console.log(item);}// ["red", "red"]、 ["green", "green"]、["blue", "blue"]Set中的成员可以用for...of 进行遍历let s = new Set([1,2,3]);for(let i of s){console.log(i);//1 2 3}s.foreach((value,key)=>console.log(value+1)); // 2 3 4
在使用foreach时要注意参数的顺序,第一个参数是键值,第二个参数是键名。
3、weakSet与Set数据解构类似,但是有两点主要的区别:一是:weakSet中只能存放对象,而不能存放其他类型的数据;二是:weakSet是弱引用,只要外部对象不引用它,就会被垃圾回收机制回收。所以在weakSet中最好值存放临时的一些数据。
4、Map数据解构
Map数据结构是键值对的形式的数据解构,但是Map解构的键与传统的键是不同,传统的键只能是字符串,而Map的键可以是任何数据类型都可以,如数字、字符串、undefined等。
注意:Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这就解决了同名属性碰撞(clash)的问题,我们扩展别人的库的时候,如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。
如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键,比如
0
和-0
就是一个键,布尔值true
和字符串true
则是两个不同的键。另外,undefined
和null
也是两个不同的键。虽然NaN
不严格相等于自身,但 Map 将其视为同一个键。5、Map方法的介绍:
属性及方法:
(a)、size返回Map解构的成员总数
const map = new Map();map.set('foo', true);map.set('bar', false);map.size // 2(b)、set(key,value)
const m = new Map();m.set('edition', 6) // 键是字符串m.set(262, 'standard') // 键是数值m.set(undefined, 'nah') // 键是 undefinedMap可以像jQuery那样,进行链式操作。(c)、get(key)
const m = new Map();const hello = function() {console.log('hello');};m.set(hello, 'Hello ES6!') // 键是函数m.get(hello) // Hello ES6!(d)、has(key)//返回boolean
(e)、delete(key)//删除
(f)、clear()//清除所有
遍历方法:
遍历的方法与Set数据解构的方法是一样的。
****************************************************
Map与其他数据结构的 转换
最主要的就是与数组之间的转换:
(1)、Map 转为数组
前面已经提过,Map 转为数组最方便的方法,就是使用扩展运算符(...)。const myMap = new Map() .set(1, 7) .set({undefined: 3}, ['abc']);[...myMap]// [ [ 1, 7 ], [ { undefined: 3 }, [ 'abc' ] ] ](2)、数组 转为 Map
将数组传入 Map 构造函数,就可以转为 Map。new Map([ [1, 7], [{undefined: 3}, ['abc']]])// Map {// 1 => 7,// Object {undefined: 3} => ['abc']// }
- es6 入门(四):Set和Map数据解构
- ES6入门之set和map
- ES6入门之set和map
- ES6入门之set和map
- ES6数组的解构赋值和Set
- 【ES6】set和map
- 【es6】Set 和 Map
- ES6--Set 和 Map
- ES6入门——Set和Map数据结构
- ES6-Set 和 Map 数据结构(ECMAScript 6 入门笔记)
- ES6快速入门(6)--set和map
- ES6中的Map和Set
- es6 set和map数据结构
- ES6 (十) Set 和 Map
- es6的map和set
- ES6的Set和Map
- es6入门(二):解构赋值和字符串的扩展
- es6学习(Set和Map)
- 记忆网络之Key-Value Memory Networks tensorflow实现
- java动态代理
- Redis核心知识——高级篇
- [USACO5.1]圈奶牛Fencing the Cows(凸包模板)
- QT算数表达式求值
- es6 入门(四):Set和Map数据解构
- Java线程
- 我遇到过的错误,异常
- 观看ThinkPHP感受
- 【技术研究】 CodeReview初识
- 原生JS实现轮播图的几种方式
- HDU 6098 Inversion
- 使用DOM方法解析xml文件
- 数据库索引及其使用