欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js数据结构--集合(set)

程序员文章站 2024-02-20 19:14:40
...

集合

  1. 无重复性
  2. 有子集

set.js

var Set2 = function() {
    var items = {};
    // has检查元素是否存在 
    this.has = function(value) {
            return items.hasOwnProperty(value);
        }
        //添加元素,集合是不重复的
    this.add = function(value) {
            if (this.has(value)) {
                return false;
            } else {
                items[value] = value;
                return value;
            }
        }
        //移除元素
    this.remove = function(value) {
        if (this.has(value)) {
            delete items[value]
            return true;
        } else {
            return false;
        }
    }

    //查看集合
    this.getItems = function() {
            return items;
        }
        //清除所有
    this.clear = function() {
        items = {};
    }

    this.size = function() {
            // var count = 0;
            // for(var i in items){
            //     if(items.hasOwnProperty(i)){
            //         count++
            //     }
            // }
            // return count;
            return Object.keys(items).length;
        }
        //查看所有的value
    this.value = function() {
        var values = [];
        for (var i in items) {
            if (items.hasOwnProperty(i)) {
                values.push(items[i]);
            }
        }
        return values;
    }

}
复制代码

实例化

实现并集,交集,差集

并集

    this.union = function(otherSet){
        var resultSet = new Set2()

        // 1 : 把自己的值提取出来
        var arr = this.value()
        for(var i = 0 ; i < arr.length ; i++){
            resultSet.add(arr[i])
        }

        // 2.把另一只集合的值提取出来
        arr = otherSet.value()
        for(var i = 0 ; i < arr.length ; i++){
            resultSet.add(arr[i])
        }
        return resultSet
    }
复制代码

交集

    this.intersection = function(otherSet){
        var resultSet = new Set2()

        var arr = this.value()
        for(var i = 0 ; i < arr.length ; i++){
            if(otherSet.has(arr[i])){
                resultSet.add(arr[i])
            }
        }

        return resultSet
    }
复制代码

差集

    this.difference  =function(otherSet){
        var resultSet = new Set2()
        var arr = this.value()
        for(var i = 0 ; i < arr.length ; i++){
            if(otherSet.has(arr[i])){
                // B中有 添加? 不添加!
            } else {
                resultSet.add(arr[i])
            }
        }

        return resultSet
    }
复制代码

es6中的Set

并集

var a = new Set([1, 2, 3]);
var b = new Set([2, 3, 4]);
var union = new Set([...a, ...b]);
console.log(union)
复制代码

交集

var a = new Set([1, 2, 3]);
var b = new Set([2, 3, 4]);
var intersect = new Set([...a].filter(x => b.has(x)));
console.log(intersect)
复制代码

差集

var a = new Set([1, 2, 3]);
var b = new Set([2, 3, 4]);
var different = new Set([...a].filter(x => !b.has(x)))
console.log(different)

复制代码