(三)前端javascript中的数据结构之集合

news2024/9/29 1:15:45

集合的特点
1.无序
2.唯一性
3.不可重复

集合相对于前面几种数据结构,比较简单好理解,看看代码实现就能知道他的用法了

集合的创建

function MySet() {
  this.item = {};
}
MySet.prototype.has = function (value) {
  return value in this.item;
};
//增
MySet.prototype.add = function (value) {
  if (this.has(value)) return false;
  this.item[value] = value;
  return true;
};
//删
MySet.prototype.remove = function (value) {
  if (!this.has(value)) return false;
  delete this.item[value];
  return true;
};
//清空
MySet.prototype.clear = function () {
  this.item = {};
};
//长度
MySet.prototype.size = function () {
  return Object.keys(this.item).length;
};
//获取值
MySet.prototype.values = function () {
  let arr = [];
  console.log("🚀 ~ Object.keys(this.item):", Object.keys(this.item));
  for (i = 0; i < Object.keys(this.item).length; i++) {
    const key = Object.keys(this.item)[i];
    arr.push(this.item[key]);
  }
  return arr;
};
//查询
MySet.prototype.print = function () {
  console.log(this.item);
  return this.item;
};

//集合的操作

//求并集
MySet.prototype.addUnion = function (data) {
  let newSet = new MySet();

  let values = this.values();

  for (let i = 0; i < values.length; i++) {
    newSet.add(values[i]);
  }

  let values2 = data.values();
  for (let i = 0; i < values2.length; i++) {
    newSet.add(values2[i]);
  }
  return newSet.values();
};

//求交集

MySet.prototype.interSection = function (data) {
  const interSection = new MySet();

  const oldValues = this.values();
  for (let i = 0; i < oldValues.length; i++) {
    if (data.has(oldValues[i])) {
      interSection.add(oldValues[i]);
    }
  }
  return interSection.values();
};

//求差集

MySet.prototype.diff = function (data) {
  const diff = new MySet();

  const oldValues = this.values();
  for (let i = 0; i < oldValues.length; i++) {
    if (!data.has(oldValues[i])) {
      diff.add(oldValues[i]);
    }
  }
  return diff.values();
};

测试

const set = new MySet()
      set.add('a',1)
      set.add('b',2)

      console.log(set.print())
      console.log('values',set.values())



      //测试求并集
      const set1 = new MySet()
      set1.add(1)
      set1.add(2)
      set1.add(3)

      const set2 = new MySet()
      set2.add(3)
      set2.add(4)
      set2.add(5)
      set2.add(6)
      set2.add(7)

      const result = set1.addUnion(set2)
      console.log(result)  //[1, 2, 3, 4, 5, 6, 7]


      //求交集
      const set3 = new MySet()
      set3.add(1)
      set3.add(2)
      set3.add(3)

      const set4 = new MySet()
      set4.add(3)
      set4.add(4)
      set4.add(5)
      set4.add(6)

      const result2 = set3.interSection(set4)
      console.log("🚀 ~ result2:", result2)

      //求差集
      const set5 = new MySet()
      set5.add(1)
      set5.add(2)
      set5.add(3)

      const set6 = new MySet()

      set6.add(3)
      set6.add(4)

      const result3 = set5.diff(set6)
      console.log("🚀 ~ result3:", result3)

在这里插入图片描述
可以参照着练习下,其实不难,这个知识点!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1909071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第224题基本计算器

题目&#xff1a; 题解&#xff1a; func calculate(s string) (ans int) {ops : []int{1}sign : 1n : len(s)for i : 0; i < n; {switch s[i] {case :icase :sign ops[len(ops)-1]icase -:sign -ops[len(ops)-1]icase (:ops append(ops, sign)icase ):ops ops[:len(o…

如何忽略部分文件或者文件夹在git提交项目时

嗨&#xff0c;我是兰若&#xff0c;最近发现有些小伙伴在提交代码时&#xff0c;总是把不该提交的文件&#xff0c;比如说本地批跑的缓存文件给提交到了git上面&#xff0c;导致别人在拉取代码的时候&#xff0c;也会把这部分文件拉取到自己本地&#xff0c;从而导致和本地的缓…

树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Opencv 版本是4.5.1&#xff1a; ​ Python 版本3.7.3&#xff1a; 今日学习&#xff…

昇思25天学习打卡营第16天 | 文本解码原理-以MindNLP为例

基于 MindSpore 实现 BERT 对话情绪识别 上几章我们学习过了基于MindSpore来实现计算机视觉的一些应用&#xff0c;那么从这期开始要开始一个新的领域——LLM 首先了解一下什么是LLM LLM 是 “大型语言模型”&#xff08;Large Language Model&#xff09;的缩写。LLM 是一种…

【高中数学/幂函数】比较a=1/2^2/3,b=1/5^2/3,c=1/5^1/3的大小

【问题】 已知&#xff1a;a1/2^2/3,b1/5^2/3,c1/5^1/3 求&#xff1a;a,b,c的大小关系&#xff1f; 【解答】 因为幂函数yx^2/3是在x正半轴是递增的&#xff0c;1/2>1/5,所以1/2^2/3>1/5^2/3&#xff0c;即a>b; 因为幂函数yx^1/3是在x正半轴也是递增的&#xff…

昇思25天学习打卡营第13天|应用实践之ResNet50迁移学习

基本介绍 今日的应用实践的模型是计算机实践领域中十分出名的模型----ResNet模型。ResNet是一种残差网络结构&#xff0c;它通过引入“残差学习”的概念来解决随着网络深度增加时训练困难的问题&#xff0c;从而能够训练更深的网络结构。现很多网络极深的模型或多或少都受此影响…

ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析

概述 论文地址&#xff1a;https://arxiv.org/pdf/2402.04615.pdf 信息图表&#xff08;图表、示意图、插图、地图、表格、文档布局等&#xff09;能够将复杂的数据和想法转化为简单的视觉效果&#xff0c;因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线…

C#——序列化和反序列化概念

(1)序列化 在编程中&#xff0c;序列化是指将对象转换为可存储或传输的格式&#xff0c;例如将对象转换为 JSON 字符串或字节流。 (2)反序列化 在编程中&#xff0c;反序列化则是将存储或传输的数据转换回对象的过程。 序列化和反序列化经常用于数据的持久化、数据交换以及…

【计算机毕业设计】013新闻资讯微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【高中数学/指数函数】比较a=0.6^0.9 b=0.6^1.5 c=1.5^0.6的大小

【问题】 比较a0.6^0.9 b0.6^1.5 c1.5^0.6的大小 【解答】 指数函数y0.6^x是减函数&#xff0c;因为0.9<1.5,所以0.6^0.9>0.6^1.5,即a>b; 指数函数y1.5^x是增函数&#xff0c;1.5^0.6>1.5^01>0.6^0.9,即c>a; 综上&#xff0c;得出c>a>b的结论。 …

移动UI:该如何给页面降噪,给你支8招。

为什么我的移动UI页面看来这么复杂、为什么用户很迷茫&#xff0c;不知道如何操作&#xff0c;为什么很拥挤&#xff0c;核心原因还是页面噪声过多了&#xff0c;需要适当的降噪。 降低页面噪音&#xff0c;提高页面的简洁高效性是一个重要的设计目标。以下是一些降噪的设计方…

音频demo:使用opencore-amr将PCM数据与AMR-NB数据进行相互编解码

1、README a. 编译 编译demo 由于提供的.a静态库是在x86_64的机器上编译的&#xff0c;所以仅支持该架构的主机上编译运行。 $ make编译opencore-amr 如果想要在其他架构的CPU上编译运行&#xff0c;可以使用以下命令&#xff08;脚本&#xff09;编译opencore-amr[下载地…

终于搞定了通过两路蓝牙接收数据

一直想做无线传感器&#xff0c;通过蓝牙来接收数据&#xff0c;无奈因为arduino接收串口数据的一些问题&#xff0c;一直搁到现在。因为学校里给学生开了选修课&#xff0c;所以手边有一些nano和mega可以使用&#xff0c;所以就做了用两个nano加上两个蓝牙模块来发射数据&…

solidity:构造函数和修饰器、事件

构造函数​ 构造函数&#xff08;constructor&#xff09;是一种特殊的函数&#xff0c;每个合约可以定义一个&#xff0c;并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数&#xff0c;例如初始化合约的owner地址&#xff1a; address owner; // 定义owner变…

web前端开发——标签一

今天我来针对web前端开发讲解标签一 Html标签_标题&段落&换行 注释标签&#xff1a;Ctrl/ Ctrl/ &#xff0c;用户可能会获取到注释标签 注释的原则: •和代码逻辑一致 •尽量使用中文 •正能量 标题标签&#xff1a;<h1></h1> h1-h6 标题标签有6…

Nacos2.X源码分析:服务注册、服务发现流程

文章目录 Nacos2.1.X源码源码下载服务注册NacosClient端NacosServer端 服务发现NacosClient端NacosServer端 Nacos2.1.X源码 源码下载 源码下载地址 服务注册 官方文档&#xff0c;对于NamingService接口服务注册方法的说明 Nacos2.X 服务注册总流程图 NacosClient端 一个…

2024年浙江省高考分数一分一段数据可视化

下图根据 2024 年浙江高考一分一段表绘制&#xff0c;可以看到&#xff0c;竞争最激烈的分数区间在620分到480分之间。 不过&#xff0c;浙江是考两次取最大&#xff0c;不是很有代表性。看看湖北的数据&#xff0c;580分到400分的区段都很卷。另外&#xff0c;从这个图也可以…

【Mac】Folder Icons for mac(文件夹个性化图标修改软件)软件介绍

软件介绍 Folder Icons for Mac 是一款专为 macOS 设计的应用程序&#xff0c;主要用于个性化和定制你的文件夹图标。以下是它的主要特点和使用方法&#xff1a; 主要特点&#xff1a; 个性化文件夹图标 Folder Icons for Mac 允许用户为 macOS 上的任何文件夹定制图标。你…

k8s集群如kubeadm init和kube-flannel.yam问题

查看k8s中角色内容kubectl get all (显示pod和server以及delment) 删除应用资源选择删除先删除部署查看部署和pod没了服务还在&#xff0c;但资源和功能以及删除&#xff0c;删除服务kubectl delete 服务名&#xff08;部署名&#xff09;&#xff0c;get pods 获取默认空间的容…

Android C++系列:Linux进程(二)

1. fork #include <unistd.h> pid_t fork(void);子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。 fork调用一次返回两次 父进程中返回子进程ID子进程中返回0读时共享,写时复制#include <sys/types.h> #include <unistd.h> #include <…