javascript新增数据结构Set/Map/WeakSet/WeakMap

75 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、Set

MDN:Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。

常用方法

1.添加  add

const set = new Set();
 
set.add(1);
set.add(100);
set.add(50);
set.add(1);
set.add({});
set.add({}); 
 
console.log(set)   // { 1, 100, 50, {}, {} }

在内存中对象保存的形式是内存地址,两个对象的内存地址不同 2.删除  delete

const set = new Set();
 
set.add(1);
set.add(100);
set.add(50);
 
set.delete(100)
 
console.log(set)   // { 1,50}

3.判断元素是否存在  has

const set = new Set();
 
set.add(1); 
set.add(100);
set.add(50);
 
console.log(set1.has(330))  //false
console.log(set1.has(100))  //true

4.获取元素个数   has

const set = new Set();
 
set.add(1); 
set.add(100);
 
console.log(set.size)  //2

5.清除所有元素   clear

const set = new Set();
 
set.add(1); 
set.add(100);
 
set.clear()

6.遍历  forEach、for...of...

set.forEach((item) => {
  console.log(item);
});
 
for(let i of set){
    console.log(i)
}

使用场景

对数组去重

const arr = [22, 10, 3, 330, 1, 33];
 
const set1 = new Set(arr);
 
console.log(set1);
 
const newArr = Array.from(set1); //将set转换为数组
 
const newArr1 = [...set1]; //将set转换为数组
 
console.log(newArr, newArr1);

二、WeakSet

MDN:WeakSet 对象允许你将弱保持对象存储在一个集合中。

  • 元素不可以重复

  • 与Set的区别

    • 只能存放对象类型
    • 对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,GC可以对该对象进行回收
  • 不可以遍历

三、Map

MDN:Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。

存储映射关系,允许对象类型作为key值

 常用方法

1.添加   set

const map = new Map();
 
const obj = { name: "lim" };
 
map.set(obj, "a");
map.set({}, "b");
 
console.log(map);   // { { name: 'lim' } => 'a', {} => 'b' }

2.获取元素   get

const map = new Map();
 
const obj = { name: "lim" };
 
map.set(obj, "a");
map.set({}, "b");
 
console.log(map.get(obj));  //a

3.删除   delete

const map = new Map();
const obj = { name: "lim" };
 
map.set(obj, "a");
map.set({}, "b");
 
console.log(map);
 
map.delete(obj);
 
console.log(map);

4.获取元素的个数   size 5.判断元素是否存在    has 6.清除所有元素   clear 7.遍历    forEach、for...of..

map.forEach((item, key) => {
  console.log(item, key);
});
 
 
for (let i of map) {
  console.log(i);
}

四、WeakMap

MDN:WeakMap()  会创建一个 WeakMap 对象,该对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

  • 以键值对存在

  • WeakMap 的key只能是对象

  • key对对象的引用是弱引用,如果没有其他引用对某个对象进行引用,GC可以对该对象进行回收

  • 方法

    • set 添加
    • get 获取某个值
    • has
    • delete