js数据结构与算法——集合

    <script>
        function Set(){
            var items = {};//使用对象表示集合,因为js对象不允许一个键指向两个不同的值,保证集合里面的匀速唯一性

            this.add = function(value){
                //向集合添加一个新的项
                if(!this.has(value)){
                    items[value] = value;
                    return true;
                }
                return false;
            }

            this.remove = function(value){
                //从集合移除一个值
                if(this.has(value)){
                    delete items[value];
                    return true;
                }
                return false;
            }

            this.has = function(value){
                //判断值是否在集合中,返回布尔值
                // return value in items;
                //第二种方法
                return items.hasOwnProperty(value);
            }

            this.clear = function(){
                //清空集合
                items = {};
            }

            this.size = function(){
                //返回集合的元素数量
                return Object.keys(items).length;
            }

            this.values = function(){
                //返回一个包含集合中所有值的数组
                return Object.keys(items);
            }

            /*
                title:集合操作
                1.并集;2.交集;3.差集;4.子集
            */

            this.union = function(otherSet){
                //并集
                var unionSet = new Set();
                var values = this.values();
                for(let i=0;i<values.length;i++){
                    unionSet.add(values[i]);
                }
                values = otherSet.values();
                for(let i=0;i<values.length;i++){
                    unionSet.add(values[i]);
                }
                return unionSet;
            }

            this.intersection = function(otherSet){
                //交集
                var intersectionSet = new Set();
                var values = this.values();
                for(let i=0;i<values.length;i++){
                    if(otherSet.has(values[i])){
                        intersectionSet.add(values[i]);
                    }
                }
                return intersectionSet;
            }

            this.difference = function(otherSet){
                //差集
                var differenceSet = new Set();
                var values = this.values();
                for(let i=0;i<values.length;i++){
                    if(!otherSet.has(values[i])){
                        differenceSet.add(values[i]);
                    }
                }
                return differenceSet;

            }

            this.subset = function(otherSet){
                //子集
                if(this.size()>otherSet.size()){
                    return false;
                }else{
                    var values = this.values();
                    for(var i=0;i<values.length;i++){
                        if(!otherSet.has(values[i])){
                            return false;
                        }
                    }
                    return true;
                }
            }

        }
        //set集合使用

        // var set = new Set();
        // set.add(1);
        // console.log(set.values()); //输出["1"]
        // console.log(set.has(1)); //输出true
        // console.log(set.size()); //输出1
        // set.add(2);
        // console.log(set.values()); //输出["1", "2"]
        // console.log(set.has(2)); //true
        // console.log(set.size()); //2
        // set.remove(1);
        // console.log(set.values()); //输出["2"]
        // set.remove(2);
        // console.log(set.values()); //输出[]
        var setA = new Set();
        setA.add(1);
        setA.add(2);
        setA.add(3);
        var setB = new Set();
        setB.add(3);
        setB.add(4);
        setB.add(5);
        setB.add(6);
        var unionAB = setA.union(setB);
        console.log(unionAB.values());
        var intersectionAB = setA.intersection(setB);
        console.log(intersectionAB.values())
        var differenceAB = setA.difference(setB);
        console.log(differenceAB.values())

    </script>

原文地址:https://www.cnblogs.com/huangmin1992/p/10415219.html

时间: 2024-11-08 23:39:05

js数据结构与算法——集合的相关文章

js数据结构与算法存储结构

数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题. 物理结构:是指数据的逻辑结构在计算机中的存储形式. 常用的数据结构有: 数组,队列(queue),堆(heap),栈(stack),链表(linked list ),树(tree),图(graph)和散列表(hash) 栈(stack):运算只在表的

【4】学习JS 数据结构与算法笔记

第一章 JS 简介 1. 环境搭建的三种方式 1. 下载浏览器 2. 使用 Web 服务器 ( XAMPP ) 3. 使用 Node.js 搭建 Web 服务器 4. 代码地址>> 2. JS 语法

js数据结构和算法---二叉树

原文: https://segmentfault.com/a/1190000000740261 //前序遍历 function preOrder(node) { if (node != null) { node.style.background = "black"; setTimeout(function () { preOrder(node.children[0]); },1500); setTimeout(function () { preOrder(node.children[1

js数据结构与算法——字典与散列表

<script> //创建字典 function Dictionary(){ var items = {}; this.set = function(key,value){ //向字典添加一个新的项 items[key] = value; } this.remove = function(key){ //从字典移除一个值 if(this.has(key)){ delete items[key]; return true; } return false; } this.has = functio

js数据结构与算法——队列

<script> //创建一个队列 function Queue(){ let items = []; //向队尾添加一个新的项 this.enqueue = function(element){ items.push(element) } //移除队列第一个项,并返回被移除的元素 dequeue this.dequeue = function(){ return items.shift(); } this.front = function(){ return items[0]; } this

js数据结构与算法——二叉树

function BinaryTree(){ var Node = function(key){ this.key = key; //值 this.left = null; //左箭头 this.right = null; //右箭头 } //根节点 var root = null; var insertNode = function(oldNode,newNode){ if(newNode.key < oldNode.key){ if(oldNode.left === null){ oldNo

重读《学习JavaScript数据结构与算法-第三版》-第2章 ES和TS

定场诗 八月中秋白露,路上行人凄凉: 小桥流水桂花香,日夜千思万想. 心中不得宁静,清早览罢文章, 十年寒苦在书房,方显才高志广. 前言 洛伊安妮·格罗纳女士所著的<学习JavaScript数据结构与算法>第三版于2019年的5月份再次刊印发行,新版内容契合当下,实为JavaScript开发人员的必备之佳作.有幸重读此版,与诸君分享共勉. 内容提要 此章节为第2章-ECMAScript与TypeScript概述,主要介绍了JS和TS的相关概念,以及在JS新版本中的新特性:let.解构.箭头函数

js算法集合(一) 水仙花数 及拓展(自幂数的判断)

js算法集合(一) ★ 最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法到底是怎么回事,但是就是不会用代码把它写出来,这里我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,希望能对大家有所帮助. 1.验证一个数是否为水仙花数 ①要写水仙花数的算法,我们首先来了解一下什么是水仙花数,水仙花数是指一个 3位正整数 ,它的每个位上的数字的 3次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153): ②了解了什么是水仙花数我们就开始分析该怎么下手.通过定义来看

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为