7.set和map数据结构

7.1.什么是set?

Set就是集合,集合是由一组无序且唯一的项组成,在es6中新增了set这种数据结构,有点类似于数组,但是它的元素是唯一的,没有重复

 let st = new Set([1,2,2,3,3,4])
console.log(st) // [1,2,3,4]

Set的size属性可以知道set中有多少元素,类似于数组的length属性

let st = new Set([1,2,2,3,3,4])
console.log(st.size); //4

7.2.Set的相关方法

1.add 添加一个数据

let st = new Set([1, 2, 3])
st.add(4)
console.log(st)

2.delete 删除一个数据

let st = new Set([1, 2, 3]);
st.delete(3);
console.log(st);

3.has 判断是否存在某个元素

let st = new Set([1, 2, 3]);
console.log(st.has(1)) //true
console.log(st.has(10)) //false

4.clear 清除所有数据

let st = new Set([1, 2, 3])
st.clear()
console.log(st)

5.keys 返回键名的遍历器

let st = new Set([1, 2, 3])
console.log(st.keys())

6.values 返回值的遍历器

let st = new Set([1, 2, 3])
console.log(st.values())

7.entries 返回键/值对的遍历器

let st = new Set([1, 2, 3])
console.log(st.entries().next())

8.foreach 使用回调函数遍历元素

let st = new Set([0, 12, 3])
st.forEach((v,k,s)=>{
console.log(v, k, s)
})

7.3.什么是Map?

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

let k1 = {a:1};
let k2 = {b:1}; let obj = {
[k1]: 1,
[k2]: 2
};
console.log(obj) //{[object Object]: 2}

上面代码中k1和k2都被转换成了[object Object],因此,k2 把 k1覆盖了,之所以要把k1和k2转换成字符串的原因就是js中的对象属性只能是字符串类型,为了解决这个问题,ES6提供了Map数据结构

1.如何创建一个Map?

let mp = new Map([
['a', 1],
['b', 2]
])
console.log(mp)
let mp2 = new Map([
[k1,1],
[k2,2]
])
console.log(mp2)

2.Map的属性size

let mp2 = new Map([
[k1,1],
[k2,2]
])
console.log(mp2.size)

7.4.Map的相关方法

1.set(key, value) 添加新的键值对

let m = new Map()
m.set('a', 1)
console.log(m)

2.get(key) 获取key对应的值

let m = new Map()
m.set('a', 1)
console.log(m.get('a'))

3.delete(key) 删除key

let m = new Map([
['a', 1],
['b', 2]
]);
m.delete('a')
console.log(m)

4.has(key) 查看是否存在某个key

let m = new Map([
['a', 1],
['b', 2]
]);
console.log(m.has('a')) //true
console.log(m.has('c')) //false

5.clear()

let m = new Map([
['a', 1],
['b', 2]
]);
m.clear()
console.log(m)

6.keys()返回键名的遍历器

let m = new Map([
['a', 'hello'],
['b', 'nodeing']
]);
for(let k of m.keys()){
console.log(k)
}

7.values()返回值的遍历器

let m = new Map([
['a', 'hello'],
['b', 'nodeing']
]);
for(let k of m.values()){
console.log(k)
}

8.entries() 返回键/值对的遍历器

let m = new Map([
['a', 'hello'],
['b', 'nodeing']
]);
for(let k of m.entries()){
console.log(k)
}

9.foreach 遍历Map

let m = new Map([
['a', 'hello'],
['b', 'nodeing']
]); m.forEach((v,k,m) => {
console.log(v, k, m)
})

视频教程地址:http://edu.nodeing.com/course/50

es6+最佳入门实践(7)的更多相关文章

  1. es6+最佳入门实践(14)

    14.模版字符串 模版字符串(template string)是增强版的字符串,定义一个模版字符串需要用到反引号 let s = `这是一个模版字符串` console.log(s) 14.1.模版字 ...

  2. es6+最佳入门实践(12)

    12.class基础用法和继承 12.1.class基础语法 在es5中,面向对象我们通常写成这样 function Person(name,age) { this.name = name; this ...

  3. es6+最佳入门实践(10)

    10.Generator 10.1.Generator是什么? Generator函数是ES6提供的一种异步编程解决方案.在它的内部封装了多个状态,因此,又可以理解为一种状态机,执行Generator ...

  4. es6+最佳入门实践(9)

    9.Iterator和for...of 9.1.Iterator是什么? Iterator又叫做迭代器,它是一种接口,为各种不同的数据结构提供统一的访问机制.这里说的接口可以形象的理解为USB接口,有 ...

  5. es6+最佳入门实践(8)

    8.Promise 8.1.什么是异步? 要理解异步,首先,从同步代码开始说 alert(1) alert(2) 像上面的代码,执行顺序是从上到下,先后弹出1和2,这种代码叫做同步代码 alert(0 ...

  6. es6+最佳入门实践(6)

    6.Symbol用法 6.1.什么是Symbol? Symbol是es6中一种新增加的数据类型,它表示独一无二的值.es5中我们把数据类型分为基本数据类型(字符串.数字.布尔.undefined.nu ...

  7. es6+最佳入门实践(5)

    5.对象扩展 5.1.对象简写 在es5中,有这样一种写法 var name = "xiaoqiang"; var age = 12; var obj = { name : nam ...

  8. es6+最佳入门实践(4)

    4.函数扩展 4.1.参数默认值 默认参数就是当用户没有传值的时候函数内部默认使用的值,在es5中我们通过逻辑运算符||来实现 function Fn(a, b) { b = b || "n ...

  9. es6+最佳入门实践(3)

    3.数组扩展 3.1.扩展运算符 扩展运算符用三个点(...)表示,从字面上理解,它的功能就是把数组扩展开来,具体形式如下: let arr = [1, 2, 3]; console.log(...a ...

随机推荐

  1. python2.7练习小例子(十三)

        13):题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.     程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成.(1)如果这个质数恰等于 ...

  2. LeetCode:19. Remove Nth Node From End of List(Medium)

    1. 原题链接 https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/ 2. 题目要求 给出一个链表,请 ...

  3. mysql ON DUPLICATE KEY UPDATE、REPLACE INTO

    INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO,两个命令可以处理重复键值问题,在实际上它之间有什么区别呢?前提条件是这个表必须有一个唯一索引或主键 ...

  4. Java Algorithm Problems

    Java Algorithm Problems 程序员的一天 从开始这个Github已经有将近两年时间, 很高兴这个repo可以帮到有需要的人. 我一直认为, 知识本身是无价的, 因此每逢闲暇, 我就 ...

  5. 多个excel合并(excel2007)

    1.新建一个空的excel文件,在需要合并的目录下. 2.右键点击sheet1,点击查看代码 3.执行此段代码 Sub 合并当前目录下所有工作簿的全部工作表() Dim MyPath, MyName, ...

  6. quartz 使用总结

    quartz是一个任务调度框架,具体的用途比如说,我想我的程序在每天的3点干什么事,每隔多长时间做一件什么事.quartz框架就可以完美地解决这些. 1.xml配置方式 首先我是用spring来管理的 ...

  7. [USACO18DEC]Fine Dining

    题面 \(Solution:\) 一开始想的是先跑一遍最短路,然后拆点之后再跑一遍,比较两次dis,然后发现拆点后会有负环(可能是我没想对拆点的方法),于是就放弃了拆点法. 我们考虑强制让每头牛选择走 ...

  8. 局部敏感哈希LSH

    之前介绍了Annoy,Annoy是一种高维空间寻找近似最近邻的算法(ANN)的一种,接下来再讨论一种ANN算法,LSH局部敏感哈希. LSH的基本思想是: 原始空间中相邻的数据点通过映射或投影变换后, ...

  9. Visual Studio各版本工程文件之间的转换 [转载]

    原网址:http://www.cnblogs.com/jmliao/p/5594179.html Visual Studio各版本工程文件之间的转换   由于VS版本比较多,低版本无法直接打开高版本的 ...

  10. BZOJ 3531 SDOI2014 旅行 树链剖分+线段树动态开点

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3531 题意概述: 给出一棵N个点的树,树上的每个结点有一个颜色和权值,支持以下四种操作: ...