zoukankan      html  css  js  c++  java
  • js封装一个集合

    // 基于对象封装一个集合
    function Set() {
        // 属性
        this.items = {};
        // ------------------方法-----------------
        // add  往集合中添加元素
        Set.prototype.add = function (value) {
            // 先判断是否有这个元素
            if (this.has(value)) return false;
            // 没有的话就添加
            this.items[value] = value;
            return true
        }
        // has  判断集合中是否已经有了这个元素
        Set.prototype.has = function (value) {
            return this.items.hasOwnProperty(value)
        }
        // remove  删除集合中的这个元素
        Set.prototype.remove = function (value) {
            // 先判断是否有这个元素
            if (!this.has(value)) return false;
            // 有的话删除
            delete this.items[value];
            return true
        }
        // clear    删除集合中的所有元素
        Set.prototype.clear = function(){
            this.items = {};
            return true
        }
        // size    获取集合的长度
        Set.prototype.size = function(){
            return Object.keys(this.items).length
        }
        // values   获取集合中的所有元素
        Set.prototype.values = function(){
            return Object.values(this.items)
        }
        //  -----集合间的操作----
        // 并集
        Set.prototype.union = function(otherSet){
            // this  代表集合A
            // otherSet  代表集合B
            // 1.先创建一个unionSet
            let unionSet = new Set()
            // 2.将集合A中的元素放到unionSet中
            var values = this.values();
            for(let i = 0; i < values.length; i++){
                unionSet.add(values[i])
            }
            // 3.判断集合B中的元素在unionSet中是否存在,没有的话就加进去
            values = otherSet.values();
            for(let i = 0; i < values.length; i++){
                unionSet.add(values[i])
            }
            // 4.返回unionSet集合
            return unionSet
        }
        // 交集
        Set.prototype.intersection = function(otherSet){
            // 1.创建一个新的集合
            let intersectionSet = new Set();
            // 2.遍历集合A,判断其元素在集合B中是否存在,存在就存到交集集合中
            var values = this.values();
            for(let i = 0; i < values.length; i++){
                if(otherSet.has(values[i])){
                    intersectionSet.add(values[i])
                }
            }
            return intersectionSet
    
        }
        // 差集
        Set.prototype.difference = function(otherSet){
            // 1.创建一个新的集合
            let differenceSet = new Set();
            // 2.遍历集合A,判断其元素在集合B中是否存在,不存在就存到差集集合中
            var values = this.values();
            for(let i = 0; i < values.length; i++){
                if(!otherSet.has(values[i])){
                    differenceSet.add(values[i])
                }
            }
            return differenceSet
        }
        // 子集  判断A是否是B的子集
        Set.prototype.subSet = function(otherSet){
            // 遍历集合A,判断其元素在集合B中是否存在,只要有一个不存在就代表A不是B的子集
            var values = this.values();
            for(let i = 0; i < values.length; i++){
                if(!otherSet.has(values[i])){
                    return false
                }
            }
            return true
        }
    
    
    }
    
    
    // ----------------------测试-------------------
    // let set = new Set();
    // set.add(12);
    // set.add('好看');
    // set.add(34);
    // set.add('美女');
    // console.log(set);
    // console.log(set.values());
    // console.log(set.size());
    // console.log(set.has(34));
    // console.log(set.has(00));
    // console.log(set.remove(34));
    // console.log(set.values());
    // console.log(set.clear());
    // console.log(set.values());
    
    let setA = new Set();
    setA.add(1);
    setA.add(2);
    setA.add(3);
    let setB = new Set();
    setB.add(3);
    setB.add(4);
    setB.add(5);
    let setC = new Set();
    setC.add(1);
    setC.add(2);
    console.log(setA.union(setB).values());
    console.log(setA.intersection(setB).values());
    console.log(setA.difference(setB).values());
    console.log(setC.subSet(setA));   // true   C是A的子集
    console.log(setA.subSet(setB));   // false   A不是B的子集
  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/cyf666cool/p/14837226.html
Copyright © 2011-2022 走看看