当前位置: 首页 > news >正文

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

集合的特点
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.lryc.cn/news/395464.html

相关文章:

  • VuePress 的更多配置
  • 问题解决|Python 代码的组织形式与编码规范
  • Flask项目搭建及部署 —— Python
  • 【C++报错已解决】Invalid Use of ‘this’ Pointer
  • 群晖NAS配置WebDav服务结合内网穿透实现跨平台云同步思源笔记
  • 内容监管与自由表达:Facebook的平衡之道
  • 电脑桌面日历记事本怎么弄 好用的桌面日历记事本
  • #招聘数据分析#2024年6月前程无忧招聘北上广深成渝对比情况
  • STM32 IIC详解(软件模拟)
  • 推三返一小程序商城开发搭建
  • 项目机会:4万平:智能仓,AGV,穿梭车,AMR,WMS,提升机,机器人……
  • [工具类]Java 合并、拆分PPT幻灯片
  • 深入了解 Timber:全面掌握 Android 日志记录的最佳实践
  • 阿一课代表随堂分享:红队反向代理之使用frp搭建反向代理
  • 基于vue的引入登录界面
  • centos7升级到欧拉openeule
  • 阿里云 Ubuntu 开启允许 ssh 密码方式登录
  • 利用投标相似度辅助围串标判定
  • iOS 开发者的 Flutter 入门课
  • 单机版k8s搭建
  • IDEA创建Spring项目无法使用Java8的解决方案
  • 无障碍快捷方式图标
  • 基于LangChain的RAG开发教程(二)
  • Nifi 与 Kettle
  • uniapp安卓端实现语音合成播报
  • Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树、贪心算法总结
  • springboot装修接单平台-计算机毕业设计源码25005
  • matlab仿真 信道(下)
  • 华宇携TAS应用中间件亮相2024年山东江信智能信创产品推介会
  • 单向链表的数据存储(申请堆空间)