zoukankan      html  css  js  c++  java
  • 编码实现js的Set

    编码实现js的Set

     1 /**
     2 *
     3 * Set
     4 *
     5 * @author: 阿宁
     6 *
     7 * @date:   2017年5月30日
     8 *
     9 */
    10 (function(global){
    11 
    12     function Set(){
    13         this.values = {};
    14         this.n = 0;
    15         this.add.apply(this,arguments);
    16     }
    17 
    18     Set.prototype.add = function(){
    19         for(var i = 0; i < arguments.length; i++){
    20             var val = arguments[i];
    21             var key = Set._v2s(val);
    22             if(!this.values.hasOwnProperty(key)){
    23                 this.values[key] = val;
    24                 this.n++;
    25             }
    26         }
    27         return this;
    28     };
    29 
    30     Set.prototype.remove = function(){
    31         for(var i = 0; i < arguments.length; i++){
    32             var key = Set._v2s(arguments[i]);
    33             if(this.values.hasOwnProperty(key)){
    34                 delete this.values[key];
    35                 this.n--;
    36             }
    37         }
    38         return this;
    39     };
    40 
    41     Set.prototype.contain = function(val){
    42         return this.values.hasOwnProperty(Set._v2s(val));
    43     };
    44 
    45     Set.prototype.foreach = function(f,c){
    46         for(var key in this.values){
    47             if(this.values.hasOwnProperty(key)){
    48                 f.call(c,this.values[key]);
    49             }
    50         }
    51         return this;
    52     };
    53 
    54     Set._v2s = function(val){
    55         switch(val){
    56             case undefined:return "u";
    57             case null:return "n";
    58             case true:return "t";
    59             case false: return "f";
    60             default:switch(typeof val){
    61                 case "number":return "#" + val;
    62                 case "string":return """ + val;
    63                 default : return "@" + objectId(val);
    64             }
    65         }
    66         function objectId(val){
    67             var prop = "|**objectid**|";
    68             if(!val.hasOwnProperty(prop)){
    69                 val[prop] = Set._v2s.next++;
    70             }
    71             return val[prop];
    72         }
    73     };
    74 
    75     Set._v2s.next = 100;
    76 
    77     global.Set = Set;
    78 
    79 })(this);
  • 相关阅读:
    软件体系架构复习要点
    Operating System on Raspberry Pi 3b
    2019-2020 ICPC North-Western Russia Regional Contest
    2019 ICPC ShenYang Regional Online Contest
    2019 ICPC XuZhou Regional Online Contest
    2019 ICPC NanChang Regional Online Contest
    2019 ICPC NanJing Regional Online Contest
    Codeforces Edu Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div.1+Div.2)
    AtCoder Beginning Contest 139
  • 原文地址:https://www.cnblogs.com/ihuning/p/6921754.html
Copyright © 2011-2022 走看看