ES6 -Set,Map相关

235 阅读2分钟

Set

ES6新推出的一种数据结构,存储的值是唯一的,不会重复,类似于Array的一种数据结构;这是与数组不相同的点;Set是集合,不能像数组用下标取值。

使用场景

1、数组去重

const a = [2,3,4,2,3,4];
// 实现1: set可以接收类数组的类型结构;再利用解构转为真正的数组;
const newA = [...new Set(a)]
// 实现2: 利用Array.from()可以将Set转为Array;
const newB = Array.from(new Set(a));
// newA: [2,3,4];

2、字符串去重;

const str = 'aasdsfsfs'
[...new Set(str)].join('')
// "asdf"

原理

往Set中推入的元素,Set是根据set的一种算法来进行确定唯一性,类似于精确匹配——===,除了对NaN的判断,set内部认为NaN是相等的;

API相关

const set = new Set();
set.add(1) 
set.size();
set.delete(1);
set.clear();
set.has(1);

weakSet

weakSet和Set结构类似,区别有两点 1、weakSet中的数据只能是对象,不能是其他类型的值; 2、weakSet的引用是弱引用;垃圾回收机制不起作用; 3、没有size属性,不能对其实行遍历;

map

传统的object数据格式,健名只能是字符串,类似于一种hash的数据结构,但是实际情况下存在,object当做key值;所以map结构扩展了之前object对健名数据结构的约束

使用

new Map([])接收一个数组,数组里面是一一一个个键值对的描述;

const map = new Map([
    ['name','张三'],
    ['title','Auther'];
])

weakMap

weakMap同weakSet,健名只支持对象类型;其他两点类似;

学习到的知识点:

for of

for of 是循环可迭代对象的值,

let iterable = [3, 5, 7];
for (let i of iterable) {
  console.log(i); 
}
// 3,5,7;

for in

for...in 循环只遍历可枚举属性;一般对于对象的一个可枚举属性的遍历

function Person() {
    this.color = 'red';
}
const tri = {
    name: 'aa',
    age: 12
};
Person.prototype = tri;
const obj = new Person();
for(let i in obj) {
    if(obj.hasOwnProperty(i)) {
        console.log(i)
    }
}
// console: color;