博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6 学习 -- Set和Map数据结构
阅读量:7238 次
发布时间:2019-06-29

本文共 2223 字,大约阅读时间需要 7 分钟。

一、Set对象数据结构

1.Set数据结构类似数组,但是其每个成员都是唯一值,没有重复,且Set本身是一个构造函数,用来生成Set数据结构,用法如下:

const setData = new Set([1, 2, 1, 3, 5]);

console.log(setData); // 打印 1,2,3,5

***Set结构的数据中,5和"5"是不同的值,NaN与NaN是相同的值,但是对象却总是不同的两个数据(即使完全一致的对象)***

Set实例拥有的属性

Set.prototype.constructor: 构造函数,默认就是Set
Set.prototype.size: 返回Set实例成员总数

2.Set实例的操作方法和遍历方法:

let set = new Set([1, 2, 5, 6]);
set.add(value): 添加某个值,返回Set实例
set.delate(value): 删除某个值,返回一个boolean值,表示删除是否成功
set.has(value): 返回一个boolean值,表示该值是否为实例的成员
set.clear(): 清除所有成员,没有返回值

3.Array.from方法可以将Set实例结构转化成数组,如:Array.from(set); // [1 ,2, 5, 6]

数组去重的另一种实现方法:
function dedupe(array) {
// 先将需要去重的数组作为参数传递给Set构造函数,去重处理后通过Array.from转化成数组
return Array.from(new Set(array));
}
var result = dedupe([1, 2, 5, 1,8]); // result = [1, 2, 5, 8]

4.Set遍历:

keys(): 返回键名的遍历器
values(): 返回键值的遍历器
entries(): 返回键值对的遍历器(每次遍历出来的都是一个数组[key,value])
forEach(): 使用回调函数遍历每个成员

**因为Set实例没有键名,只有键值,所有键名和键值都是同一个值,故keys方法与values方法结果完全一致

for(let item of set.keys()) {
console.log(item); //打印结果为1、2、5、8
}
// forEach()遍历
set.forEach((value, key)=>{console.log("key:"+key+" value:"+value)})

 

二、Map数据结构

1.Map是新型的对象数据解构,ES5、ES3的对象的键只能是字符串,而ES6中的Map数据结构键名可以是任意类型的数据
const map = new Map();
const obj = {name: "bob"};

map.set(obj, "hello world"); // 以对象obj作为键名

map.get(obj); // "hello world" // 获取键名对应的键值

map.has(obj); // true 检查Map实例是否含有键名obj

map.delate(obj); // true 删除Map实例的obj键值对,如果存在这个键值对,则返回true,反之返回false
map.has(obj); // false

const m = new Map([

["a", 1],
["b", 2]
])
m.size // 2
m.has("a") // true
m.get("a") // 1

// Map数据结构如果对同一个键名多次赋值,那么最后一次的覆盖前面的

// 如果读取一个未知的键,则返回undefined
// Map的键实际是跟内存地址绑定的,只要内存地址不同,就视为两个键,但是如果键是一个简单的值(数字、字符串、布
尔值),Map将其视为同一个键,如0和-0或者+0是同一个键,布尔值true跟字符串true不是同一个键,undefined和null也不
是同一个键。而NaN虽然不等于NaN,但是Map将其视为同一个键

2.Map实例的属性和操作方法

(1)size属性 --- 返回Map结构的成员数量
(2)set(key, value) --- 设置键值,键名为key,键值是value,如果键名key已经存在,则覆盖之前的value值,否则生成
一个新的键值对
(3)get(key) --- 读取键名key对应的键值,如果找不到key对应的键名,则返回undefined
(4)has(key) --- 检查Map实例是否含有键key,没有则返回false,反之返回true
(5)delate(key) --- 删除键名key对应的键值对
(6)clear() --- 清空Map实例的所有键值对

3.Map遍历方法:

与Set实例一样,都存在四个遍历方法,keys()、values()、entries()、forEach()
keys() // 遍历Map实例的所有键
values() // 遍历出Map实例的键所对应的value值
entries() // 遍历Map实例的所有键值对

转载于:https://www.cnblogs.com/secretAngel/p/9699389.html

你可能感兴趣的文章
《MySQL入门很简单》练习7.5
查看>>
数组希尔排序法
查看>>
【嵌入式】安装Linux系统到开发板
查看>>
深入理解node.js的module.export 和 export方法的区别
查看>>
嵌入式第十二次
查看>>
第8课 - 条件判断语句
查看>>
【Unity】9.2 如何添加粒子组件
查看>>
U盘容量足够,但在拷贝时提示“文件太大”无法拷贝时怎么办
查看>>
Android开源项目分类汇总
查看>>
解决windows7蓝屏的方法
查看>>
将NASM汇编器集成到Visual Studio中
查看>>
linux设置自动更换壁纸
查看>>
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
查看>>
pandas安装过程中提示unable to find vcvarsall.bat的解决方法
查看>>
RestTemplate--解决中文乱码
查看>>
launch edge和latch edge延迟
查看>>
关于Android studio Logcat显示不全,不显示自己需要打印的LOG数据
查看>>
微信小程序--问题汇总及详解之tab切换
查看>>
篇1 安卓app自动化测试-appium环境篇
查看>>
html5 拖拽练习题
查看>>