一個JavaScript的Hash類

來源:互聯網
上載者:User
javascript

<script type="text/javascript">
//源碼如下:
var Hash = function(){
    this._data = new Object();   
}
    function Hash$add(key,value){    
        if(!key) return;
        if(typeof(value) === 'undefined') return;       
        this._data[key] = value;  
    }
    function Hash$addRange(h){
        if(!h || !h._data) return;
        for(var key in h._data){
            var value = h._data[key];           
            this.add(key,value);           
        }
    }
    function Hash$remove(key){
        if(!key) return null;
        var value = this._data[key];
        delete this._data[key];   
        return value;             
    }
   
    function Hash$removeAt(index){
        if(isNaN(index)) return null;
        var i = 0;       
        for(var key in this._data){
            if(i == index){
                return this.remove(key);
            }
            i++;
        }
        return null;
    }
    function Hash$removeRange(startIndex,endIndex){
        if(isNaN(startIndex) || isNaN(endIndex)) return null;
        if(startIndex > endIndex)return null;
        var i = 0;
        var h = new Hash();
        for(var key in this._data){
            if(i>=startIndex && i<= endIndex){
                h.add(key,this.remove(key));
            }else if(i>endIndex){               
                break;
            }
            i++;
        }       
        return h;
    }   
    function Hash$getCount(){
        var i = 0;
        for(var key in this._data) i++;       
        return i;
    }
    function Hash$find(key){
        if(!key) return null;  
        return this._data[key];
    }
    function Hash$forEach(method,instance){
        var i = 0;
        for(var key in this._data){
            var value = this._data[key];
            if(typeof(value) !== 'undefined'){
                var r = method.call(instance, key, value, i, this);
                if(r == 'break') break;               
                i++;
            }
        }
    }
    function Hash$getKeys(){
        var arr = new Array();
        for (var key in this._data){
            arr.push(key);
        }
        return arr;
    }
    function Hash$getValues(){
        var arr = new Array();
        for (var key in this._data){
            arr.push(this._data[key]);
        }
        return arr;       
    }
Hash.prototype = {
    _data : null,
    add : Hash$add,
    addRange: Hash$addRange,
    remove : Hash$remove,
    removeAt : Hash$removeAt,
    removeRange : Hash$removeRange,
    getCount : Hash$getCount,
    find : Hash$find,
    forEach : Hash$forEach,
    getKeys : Hash$getKeys,
    getValues : Hash$getValues   
}
Hash.__typeName = 'Hash';


//測試代碼如下:
//Test Hash class
var h1 = new Hash();
h1.add("fsd","1");
h1.add("xdfs","22");
alert(h1.getCount()); //2

var h2 = new Hash();
h1.forEach(function(key,value,i,h){
    this.add(key,value);    //h2中加,h1中減
    h.remove(key); 
},h2);
alert(h1.getCount()+","+h2.getCount());//0,2

var h3 = new Hash();
h3.addRange(h2);
alert(h3.getCount());//2

var ks = h3.getKeys();
for(i=0; i<ks.length; i++){
    alert(ks[i]+": "+h3.find(ks[i]));   
}
var vs = h3.getValues();
for(i=0; i<vs.length; i++){
    alert(vs[i]);
}

h3.add("fsa","333");
h3.add("fsa","4444");//這裡只會增加一個,即後來的會把前面同名鍵的值覆蓋掉
alert(h3.getCount());//3 而不是 4

var h4 = h3.removeRange(0,2);
alert(h4.getCount());
h4.forEach(function(k,v,i,h){
    if(v == '22') return 'break';//可以使用返回 'break' 來跳出迴圈體
    alert(k+": "+v+": "+i);
});
</script>



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.