JavaScriptデータ構造——セット(Set)


概念と構造
  • セットの中の要素は重複できません.
  • セットの中の要素は値だけです.
  • は、任意の要素のセットを空セットと呼ぶ.
  • セットの操作
    集合は9種類の常用操作があります.
  • は、要素がhas(element)
  • に存在するかどうかを検査する.
  • 追加要素add(element)
  • は、要素remove(element)
  • を除去する.
  • クリアセットclear()
  • は、セット長size()
  • を取得する.
  • セットのすべての値を抽出するvalues()
  • は、union(otherSet)
  • を統合する.
  • クロスintersection(otherSet)
  • 差分セットdifference(otherSet)
  • JS実現
    JSの中の集合構造は対象を通じて実現する必要があります.集合の中の元素は値だけで、キーや索引がないので、対象の中の属性のキーパッドの値を同じ値にしてこの効果を達成することができます.
    function MySet(){
        
        var set = {};
    
        //        
        this.has = function(element){
            return set.hasOwnProperty(element);
        }
    
        //    
        this.add = function(element){
            if(this.has(element)){
                //      
                return false;
            }else{
                //       
                set[element] = element;
                return element;
            }
        }
    
        //    
        this.remove = function(element){
            if(this.has(element)){
                //       
                delete set[element];
                return true;
            }else{
                //    
                return false;
            }
        }
    
        //    
        this.clear = function(){
            set = {};
        }
    
        //      
        this.size = function(){
            return Object.keys(set).length;
        }
    
        //       
        this.values = function(){
            var result = [];
            for(var key in set){
                if(set.hasOwnProperty(key)){
                    result.push(set[key]);
                }
            }
            return result;
        }
    
        //  
        this.union = function(otherSet){
            var result = new MySet();
            this.values().forEach(element => {
                result.add(element);
            });
            otherSet.values().forEach(element => {
                result.add(element);
            });
            return result;
        }
    
        //  
        this.intersection = function(otherSet){
            var result = new MySet();
            this.values().forEach(element => {
                if(otherSet.has(element)){
                    result.add(element);
                }
            });
            return result;
        }
    
        //  
        this.difference = function(otherSet){
            var result = new MySet();
            this.values().forEach(element => {
                if(!otherSet.has(element)){
                    result.add(element);
                }
            });
            return result;
        }
    }
    
    [Vue warn]:アトリブト“id”is ignored on component<br>because the component is a fragment instan<br>warning<br>VUE<br>vueをする時、いつもwarningが現れて、ヒントによってウェブサイトまで解決案を見て、英語の能力に対して比較的に悪いことを掌握するため、見たところ何度もやっと本当に自分の問題を発見します.<br>warningは以下の通りです<br>[Vue warn]:Attribute“id”is ignored on component because the component is a frangement instance:<br>warnignの下にリンクがあります. http://vuejs.org/guide/components.html#Fragment_Instance<br>私はfrangement instanceというキーワードを探しています.okは問題を見つけました.<br>frangement instanceが発生した場合は、様々な状況があります.<br>The re are multiple conditions that will turn a Vue instance into a fragment instance:<br>Template contains multiple top-level elements.(複数のトップ要素を含んでいます.あなたのモデル要素は唯一の父親要素がありません.)<br>Template contains only plin text.(テンプレートの中には純粋なテキストのみを含む)<br>Template contains only another component(which can potentallybe a fragment instance itself).(テンプレートは他のコンポーネントだけを含んでいますが、このコンポーネントはfrangement instanceでもいいです.)<br>Template contains only an element directive,e.g.  or vue-router’s.(モデルはコンポーネントのみを含みます. )<br>Template root node has a flow-control directive,e.g. v-i or v-for.(モデルのルートノードはv-ifに生きていますv-forは論理的に判断されます)<br>実は、問題があっても大丈夫です.私達はvueの提示によってリンクをよく見て、いつも解決案を見つけます.<br>また、溝を吐いてもいいですか?vue報waringの時はどこでwarningが出ているか教えてくれればいいです.私は一つのパターンをめくってみます....