无梦家园

无梦家园
posts - 21, comments - 151, trackbacks - 8, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

一个JavaScript的Hash类

Posted on 2007-02-06 09:08 沧桑雨迢迢 阅读(2235) 评论(11)  编辑 收藏 网摘 所属分类: Javascript

本Hash类到今天已经进行了又一次修改啦,所以更新下.

var Hash = function(h){    
    
this._data = new Object();
}

    
function Hash$clear(){
        
delete this._data;
        
this._data = new Object();    
    }
        
    
function Hash$add(key,value){
        
if(!key || typeof(value) === 'undefined') return false;                
        
this._data[key] = {key: key,value: value};
        
return true;
    }

    
function Hash$addRange(h){
        
for(var key in h._data){
            
var item = h._data[key];
            
if(typeof(item) !== 'undefined'){
                
this.add(item.key,item.value);
            }

        }

    }

    
function Hash$remove(key){
        
if(!key) return undefined;
        
var item = this._data[key];    
        
delete this._data[key];
        
return item;
    }

    
function Hash$removeAt(index){
        
if(isNaN(index)) return undefined;
        
var i = 0;        
        
for(var key in this._data){
            
if(i == index){
                
return this.remove(key);
            }

            i
++;
        }

        
return undefined;
    }

    
function Hash$removeRange(startIndex,endIndex){
        
if(isNaN(startIndex) || isNaN(endIndex)) return undefined;
        
var i = 0;
        
var h = new Hash();
        
for(var key in this._data){
            
if(i >= startIndex && i<= endIndex){
                h.add(key,
this.remove(key).value);
            }

            i
++;
        }

        
return h;
    }
    
    
function Hash$getCount(){
        
var i = 0;
        
for(var key in this._data) i++;       
        
return i;
    }

    
function Hash$forEach(method,instance){
        
var i = 0;
        
for(var key in this._data){
            
var item = this._data[key];
            
if(typeof(item) !== 'undefined'){
                method.call(instance, item, i, 
this);
                i
++;
            }
else{
                
delete this._data[key];
            }

        }

    }

    
function Hash$getKeys(){
        
var arr = new Array();
        
for (var key in this._data){
            
var item = this._data[key];
            arr.push(item.key);
        }

        
return arr;
    }

    
function Hash$getValues(){
        
var arr = new Array();
        
for (var key in this._data){
            
var item = this._data[key];
            arr.push(item.value);
        }

        
return arr;        
    }

    
function Hash$getItem(key){
        
if(!key) return undefined;
        
var item = this._data[key];
        
if (typeof(item) !== 'undefined'){
            
return item;                        
        }
else{
            
delete this._data[key];
            
return undefined;
        }
        
    }

    
function Hash$containsKey(key){        
        
if(typeof(this.getItem(key)) !== 'undefined'){
            
return true;
        }

        
return false;
    }

    
function Hash$containsValue(value){
        
for(var key in this._data){        
            
if(value === this._data[key].value){
                
return true;
            }

        }

        
return false;    
    }

Hash.prototype 
= {
    _data : 
null,
    _keys : 
null,
    clear : Hash$clear,
    add : Hash$add,
    addRange : Hash$addRange,
    remove : Hash$remove,
    removeAt : Hash$removeAt,
    removeRange : Hash$removeRange,
    getCount : Hash$getCount,
    forEach : Hash$forEach,
    getKeys : Hash$getKeys,
    getValues : Hash$getValues,
    getItem: Hash$getItem,
    containsKey: Hash$containsKey, 
    containsValue: Hash$containsValue
}

Hash.__typeName 
= 'Hash';
Hash.__class 
= true;


   有需要的朋友请看下,还是比较好用的,如果有BUG或缺陷,欢迎大家留言指正撒~~~

Feedback

#1楼    回复  引用  查看    

2007-02-06 09:35 by 非我      
不错

#2楼    回复  引用    

2007-02-06 11:38 by wkaka [未注册用户]
asp.net2.0(C#)QQ群:16205966
欢迎大家加入讨论

#3楼    回复  引用  查看    

2007-02-06 13:51 by Amnoh      
function Hash$add(key,value){
if(!key) return;
if(typeof(value) === 'undefined') return;
this._data[key] = value;
}

==================
typeof(value) === 'undefined'

是不是多了个'='

#4楼 [楼主]   回复  引用  查看    

2007-02-06 14:35 by 沧桑雨迢迢      
不多,这是确保必定为'undefined',而不会是null或空的情况。
JavaScript支持这样的严格用法

#5楼    回复  引用  查看    

2007-02-06 16:15 by 命运有自己的梦!      
前两天想通过hash来解决一个问题,后来又懒得去整,想了别的办法来解决了,想不到仁兄已经做出来了,用之!

#6楼    回复  引用  查看    

2007-02-06 16:36 by Amnoh      
@沧桑雨迢迢
谢谢指教,又学到了东西 :)

#7楼    回复  引用    

2007-02-07 09:12 by yzx110 [未注册用户]
hash 里面 removeAt和removeRange的意义是什么呢?

#8楼    回复  引用  查看    

2007-02-07 10:41 by 文炽城      
很不错``感谢```
收藏先``

#9楼    回复  引用    

2007-02-27 11:38 by 注册香港公司 [未注册用户]
收藏收藏

#10楼    回复  引用    

2007-11-19 22:13 by nickey [未注册用户]
这个JS的HASH,和用数组有什么区别? 就是一个数组的封装?

#11楼    回复  引用    

2008-08-07 16:34 by Stone_Boy [未注册用户]
我个人觉得它不能算是 hash的。
只是算一个 map 数据结构。
而 js 自身就支持字典数据结构。
真正的hash没这么简单,它怎么计算 hashcode 是很关键的一步。

呵呵
个人简介啦 ……

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-04-26 17:33 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: