前端开发javascript 哈希表实现

1.javascript没有hashtable所以需要自己封装一个(用 in 判断是否含有那个属性)
[backcolor=yellow]2.这是一个key 对应一个value的,但是哈希表是可以一对多的,在最后提供改进版[/bgcolor]
function HashTable(){
var size = 0;//哈希表的大小
var table = new Object();
this.add = function(key,value){
if(!this.isHaveKey(key)){
table[key] = value;
size++;
}else{
alert(“已经存在这个key”);
}
};
this.getValue = function(key){
return this.isHaveKey(key)?table[key]:null;
};
this.isHaveKey = function(key){
return key in table;
}//判断是否有这个key
this.deleteKey = function(key){
if(this.isHaveKey(key)){
delete table[key];
size –;
}else{
alert(“不包含这个key”);
}
}
this.clear = function(){
size = 0;
table = new Object();
}
this.getLength = function(){
return size;
}
}//哈希表的封装方法
3.但是有一个疑问 如果我用table.key 代替上面的table[key],就会出现问题呢????
this.isHaveKey = function(key){
return key in table;
}//判断是否有这个key
这个无论有没有总会返回false呢?
其实这是一个想当然的问题!下面来解释解释:
object.name 中name 是一个属性,我们要获取object 的属性时,可以通过object[“name”]或者object.name 来获得,那好我们看下面的例子:
function HashTable(){
var table = new Object();
this.add = function(key,value){
table.key = value;
}
this.getValue = function(key){
return table.key;
}
}
var hashtb = new HashTable();
hashtb.add(“A”,100);
hashtb.add(“B”,99);
hashtb.getValue(“A”);//99
为什么是99不是100呢?因为table里面的属性只有一个key并没有创建参数里的那个key,因为参数是变量而不是属性!!!看下面这个:
<script>
    function HashTable() {
        var table = new Object();
        this.add = function (key, value) {
            table.key = value;
        }
        this.getValue = function (key) {
            return table.key;
        }
        this.getTable = function () {
            return table;
        }
    }
    var hashtb = new HashTable();
    hashtb.add(“A”, 100);
    hashtb.add(“B”, 99);
    var tb = hashtb.getTable();
    alert(tb.key);//看到没是99,自始至终改变的都是tb的key属性哦!
</script>
那我非不想要通过table[“keyname”]来获取非要通过table.keyname 怎么整呢?使用javascript eval
看下面这个例子:
我有多个变量, value1, value2, value3 …. value100
知道一个ID等于1~100中的值
当ID = 19的时候,如何将 value19 赋给 我想要的变量 x ?(不用数组)利用eval() 实现if(id==19){
x = eval(“value”+id);
}value+id可以得到你的那个value19这一个字符串,eval表示将这个字符串按语句处理,也就是说取value19的变量了!所以
<script>
    var obj = { “call”: 1, “num”: 2 };
    key = “call”;
    var objectValue = eval(‘obj.’ + key);
    alert(objectValue);//这样就可以得到1了
</script>
这样就是可以通过变量获取属性的!其实说到底就是,属性是属性,变量是变量,不要混为一谈!!!
3.哈希表 一对多 function HashTable(){
var size = 0;
var table = new Object();
this.addKey = function(key,value){
if(!this.isHaveKey(key)){
table[key] = new Array();
table[key].push(value);
size++;
}else{
table[key].push(value);
}
}
this.getValue = function(key){
if(!this.isHaveKey(key)){
alert(“不存在这样的key!”);
exit;
}else{
return table[key];
}
}
this.deleteKey = function(key){
if(!this.isHaveKey(key)){
alert(“不存在这样的key!”);
}else{
delete table[key];
size–;
}
}
this.isHaveKey = function(key){
return key in table//用in 判断是否有该属性
}
this.clear = function(){
table = new Object();
size = 0;
}
}
前端知识开发游戏
网易游戏 前端开发
游戏开发 前端后端
赞(0)
前端开发者 » 前端开发javascript 哈希表实现
64K

评论 抢沙发

评论前必须登录!