美文网首页
26.Set数据结构和WeakSet数据结构

26.Set数据结构和WeakSet数据结构

作者: 静昕妈妈芦培培 | 来源:发表于2022-02-14 14:57 被阅读0次

Set的基本使用

  • 在ES6之前,我们存储数据的结构主要有两种:数组、对象。
  • 在ES6中新增了另外两种数据结构:SetMap,以及它们的另外形式WeakSetWeakMap

Set是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是元素不能重复。

  • 创建Set我们需要通过Set构造函数(暂时没有字面量创建的方式):
  • 我们可以发现Set中存放的元素是不会重复的,那么Set有一个非常常用的功能就是给数组去重。

1.ES6新增数据结构Set

const set = new Set();
set.add(10);
set.add(20);
set.add(30);
set.add(10);
set.add(30);
console.log(set); //Set(3) {10, 20, 30}

2.对数组arr进行去重

const arr = [10, 20, 30, 20, 10];

//解决方式:
//1.把数组转换为Set数据结构,则会去掉重复的元素
const arrSet = new Set(arr);
// 2.把Set数据结构转换为数组
// 方法一:
const newArr = Array.from(arrSet);
// 方法二:
const newArr1 = [...arrSet];
console.log(newArr); // [ 10, 20, 30 ]
console.log(newArr1); // [ 10, 20, 30 ]

3.Set的属性:

  • size Set数据结构的元素个数

4.Set的方法

  • add(item) 向Set数据结构添加元素
  • delete(item) 从Set数据结构删除元素
  • has(item) //查询Set数据结构是否包含某个元素,返回一个布尔值
  • clear() //清空Set数据结构
const set1 = new Set();

//给set1添加元素
set1.add(10);
set1.add({});
set1.add("aaa");
console.log(set1); //Set(3) {10, {}, 'aaa'}

//查看set1中的元素个数
console.log(set1.size) // 3

//查看set1是否包含aaa元素
console.log(set1.has("aaa")); //true

//删除aaa元素
set1.delete("aaa");
console.log(set1); //Set(3) {10, {}}

//清空set1
set1.clear();
console.log(set1); //Set(0) {}

5.Set数据结构是支持遍历的

const set = new Set();
set.add(10);
set.add({});
set.forEach(item => {
  console.log(item)
})
// 10
// {}
const set = new Set();
set.add(10);
set.add({});
for(let item of set) {
  console.log(item)
}
// 10
// {}

WeakSet的基本使用

  • ES6新增了数据类型WeakSet
  • WeakSet数据结构只能存放对象类型
  • WeakSet数据结构对对象元素的引用是弱引用, 如果对元素对象的其他强引用别取消,只剩下WeakSet对此对象进行弱引用,则此对象会被GC回收
  • WeakSet数据结构不能被遍历,也不能被解构
const w = new WeakSet();
const obj = {
 name: "why",
 age: 18,
};
w.add(obj);
console.log(w); //WeakSet { <items unknown> }

WeakSet常见的方法:

  • add(value):添加某个元素,返回WeakSet对象本身;
  • delete(value):从WeakSet中删除和这个值相等的元素,返回boolean类型;
  • has(value):判断WeakSet中是否存在某个元素,返回boolean类型;
const w = new WeakSet();
const obj = {
  name: "why",
  age: 18,
};
w.add(obj);
//w中是否包含obj这个对象
console.log(w.has(obj)); //true
//从w中删除obj对象
console.log(w.delete(obj)); //true
console.log(w.has(obj)); // false
console.log(w); // WeakSet { <items unknown> }

WeakSet的应用场景

const pWeakSet = new WeakSet();
class Person {
  constructor() {
    pWeakSet.add(this);
  }
  running() {
    if (!pWeakSet.has(this)) {
      throw new Error("running方法不能被非构造函数Person创建出来的对象调用");
    }
    console.log("running");
  }
}
const p = new Person();
p.running(); // running
p.running.call({ name: "why" }); //running方法不能被非构造函数Person创建出来的对象调用

非常感谢王红元老师的深入JavaScript高级语法让我学习到很多 JavaScript 的知识

相关文章

  • 26.Set数据结构和WeakSet数据结构

    Set的基本使用 在ES6之前,我们存储数据的结构主要有两种:数组、对象。 在ES6中新增了另外两种数据结构:Se...

  • ES6新增WeakRef和FinalizationRegistr

    WeakRef WeakSet 和 WeakMap 是基于弱引用的数据结构,ES2021[https://gith...

  • ES6中的Set和Map

    ES6中新增了Set、WeakSet、Map、WeakMap数据结构 一、Set Set是类似数组的数据结构,和数...

  • WeakSet数据结构

    WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。 首先,WeakSet...

  • Set和WeakSet数据结构

    Set的声明 Set和Array 的区别是Set不允许内部有重复的值,如果有只显示一个,相当于去重。虽然Set很像...

  • Set 和 Map 数据结构

    Set WeakSet Map WeakMap Set § ⇧ 基本用法 § ⇧ ES6 提供了新的数据结构 Se...

  • Map、WeakMap、Set、WeakSet

    ES6引入了四种新的数据结构:映射(Map)、集合(Set)、弱集合(WeakSet)和弱映射(WeakMap) ...

  • ES6中的Set和Map

    分四部分:Set、WeakSet、Map和WeakMap。 Set: 概念:类似于数组的数据结构,成员的值都是唯一...

  • Javascript数据结构——WeakSet

    WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。首先,WeakSet ...

  • ES6中 Set和WeakSet数据结构

    ES6中 Set和WeakSet数据结构 SetSet是类似于数组,但是成员变量的值都是唯一的,没有重复的值 Se...

网友评论

      本文标题:26.Set数据结构和WeakSet数据结构

      本文链接:https://www.haomeiwen.com/subject/xsbtlrtx.html