js資料結構--集合(set)

遨翔在知識的海洋裡發表於2019-01-15

集合

  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;
    }

}
複製程式碼

例項化

js資料結構--集合(set)

實現並集,交集,差集

js資料結構--集合(set)

並集

    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
    }
複製程式碼

js資料結構--集合(set)

交集

    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
    }
複製程式碼

js資料結構--集合(set)

差集

    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
    }
複製程式碼

js資料結構--集合(set)

js資料結構--集合(set)

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)
複製程式碼

js資料結構--集合(set)

交集

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)
複製程式碼

js資料結構--集合(set)

差集

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)

複製程式碼

js資料結構--集合(set)

相關文章