es6 —— Set与Map数据结构

一、 Set数据结构
1. 基本用法
  1. ES6提供了新的数据结构Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。
  2. Set本身是一个构造函数,用来生成Set数据结构
  3. 当向Set对象中加入两个空对象时,其是否两者不同,即任何两个对象都是不相等的。
  4. 向Set实例加入值时,不会发生类型转换,即在加入值时的判断算法为“Same-value-zero equality”,它类似于===。主要的区别是:向Set中加入值认为NaN等于自身,而精确相等运算符,即===认为NaN不等于自身。
  5. Set函数可以接受一个数组/一个字符串作为参数用来初始化
  6. 可通过Set数据结构来去除数组中和字符串中重复的成员、重复字符。
  7. ...扩展运算符可以将Set集合转换成数组,说明Set集合是定义了遍历器的对象。
//①
 const a = new Set();
        [1,2,3,4,2,23,1].forEach(x=>{
            a.add(x)
        });
        console.log(a);//[1,2,3,4,23]
 //②
  const s = new Set([1,2,3,1,2,3,4,5]);
        console.log(s);//[1,2,3,4,5]
        s.size;//5

//③ 去除数组中重复的成员
const a = [1,2,2,3,4,5,5,6];
const s = new Set(a);//s:[1,2,3,4,5,6]

//④ 去除字符串中重复的字符串
const str = "123sss456";
const s = [...new Set(str)].join('');
s;//123s456
2. Set实例的相关方法

对象.add(值):向Set实例中添加元素
对象.size:返回Set实例中元素的个数
对象.delete(被删除元素):返回是true/false,如果删除成功返回true,如果删除失败返回false。其中被删除元素若在实例中未找到则删除失败。被删除元素也是按照类似===方式在实例中匹配的
对象.has(判断元素):返回true/false。如果实例中包含参数则返回true,否则返回false
对象.clear():清除实例中所有元素,无返回值
⑥ 遍历操作:

  1. 由于Set实例没有键只有值,故其keys()方法和values()方法的行为完全一致
  2. Set 结构的实例默认可遍历,它的默认遍历器生成函数就是它的values方法。故可以省略values()方法直接遍历Set结构的实例。
  3. 对象.keys():返回键名的遍历器
  4. 对象.values():返回键值的遍历器
  5. 对象.entries():返回键值对的遍历器
  6. 对象.forEach(fn):使用回调函数遍历每个成员
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"]
二、 Map数据结构

js的对象(Object)本质上是键值对的集合(Hash结构),但是传统上只能用字符串当做键。为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合。但是键不限于字符串,各种类型的值(包括对象)都可以当做键。也就是说,Object结构提供了"字符串-值"的对应,Map结构提供了"值-值"的对应。

const data = {};
const element = document.getElementById('myDiv');

data[element] = 'metadata';
data['[object HTMLDivElement]'] // "metadata"
1. Map实例的相关方法

对象.set(键,值):向Map实例添加键值对
对象.get(键):通过键值在Map实例中取得对应的值
对象.has(键):返回true/false。判断Map实例中是否有该键值对。
对象.delete(键):返回true/false。删除Map实例中参数键对应的键值对
对象.size:返回Map实例中键值对的个数
对象.clear():清除Map实例内的所有键值对
⑦ 遍历操作

  1. 对象.keys():返回键名的遍历器
  2. 对象.values():返回键值的遍历器
  3. 对象.entries():返回键值对的遍历器
2. JSON对象和Map实例互转
① JSON对象转Map实例

Object.keys(json对象):返回json对象的属性集合(返回形式为数组)

let op = {
	"name":"张三",
	"age":18
}
Object.keys(op);//["name","age"]
let op = {
	"name":"张三",
	"age":18
}
let m1 = new Map();
for(let key of Object.keys(op)){
	m1.set(key,op[key])
}
② Map实例转JSON对象
let op = {
	"name":"张三",
	"age":18
}
let m1 = new Map();
for(let key of Object.keys(op)){
	m1.set(key,op[key])
}
let jsonStr = {};
for(let item of m1.keys()){
	jsonStr[item] = m1.get(item);
}
发布了72 篇原创文章 · 获赞 72 · 访问量 6319

猜你喜欢

转载自blog.csdn.net/weixin_43314846/article/details/102745411