2009-01-19 65 views
40

我使用的是哈希表中的JavaScript,我想表明在哈希表哈希表中的JavaScript

one -[1,10,5] 
two -[2] 
three -[3, 30, 300, etc.] 

我发现下面的代码下面的值。它适用于以下数据。

one -[1] 
    two -[2] 
    three-[3] 

如何将一个[1,2]值分配给哈希表,以及如何访问它?

<script type="text/javascript"> 
    function Hash() 
    { 
     this.length = 0; 
     this.items = new Array(); 
     for (var i = 0; i < arguments.length; i += 2) { 
      if (typeof(arguments[i + 1]) != 'undefined') { 
       this.items[arguments[i]] = arguments[i + 1]; 
       this.length++; 
      } 
     } 

     this.removeItem = function(in_key) 
     { 
      var tmp_value; 
      if (typeof(this.items[in_key]) != 'undefined') { 
       this.length--; 
       var tmp_value = this.items[in_key]; 
       delete this.items[in_key]; 
      } 
      return tmp_value; 
     } 

     this.getItem = function(in_key) { 
      return this.items[in_key]; 
     } 

     this.setItem = function(in_key, in_value) 
     { 
      if (typeof(in_value) != 'undefined') { 
       if (typeof(this.items[in_key]) == 'undefined') { 
        this.length++; 
       } 

       this.items[in_key] = in_value; 
      } 
      return in_value; 
     } 

     this.hasItem = function(in_key) 
     { 
      return typeof(this.items[in_key]) != 'undefined'; 
     } 
    } 

    var myHash = new Hash('one',1,'two', 2, 'three',3); 

    for (var i in myHash.items) { 
     alert('key is: ' + i + ', value is: ' + myHash.items[i]); 
    } 
</script> 

我该怎么做?

回答

71

用上面的功能,你会怎么做:

var myHash = new Hash('one',[1,10,5],'two', [2], 'three',[3,30,300]); 

当然,下面也将工作:

var myHash = {}; // New object 
myHash['one'] = [1,10,5]; 
myHash['two'] = [2]; 
myHash['three'] = [3, 30, 300]; 

因为在JavaScript中的所有对象都是哈希表!但是,由于使用foreach(var item in object)也可以获得所有功能等,但它会更难以迭代,但根据您的需要,这可能已足够。

+21

keys = Object.keys(myHash)将给出一个键的数组,所以在这种情况下它会返回['一二三']。然后你可以使用for(var i = 0; i zupa 2013-01-16 15:17:19

+0

我在javascript中找不到哈希。 (哈希值没有定义。)你能否提供链接 – jforjs 2016-10-18 08:36:11

32

如果你想要做的是存储在一个查找表中的一些静态值,你可以使用一个Object Literal(同样由JSON使用格式)做紧凑:

var table = { one: [1,10,5], two: [2], three: [3, 30, 300] } 

,然后使用访问它们JavaScript的关联数组语法:

alert(table['one']); // Will alert with [1,10,5] 
alert(table['one'][1]); // Will alert with 10 
8

您可以使用我的JavaScript哈希表实现,jshashtable。它允许任何对象被用作关键字,而不仅仅是字符串。

2

Javascript解释器本身将对象存储在散列表中。如果你担心原型链受到污染,你总是可以这样做:

// Simple ECMA5 hash table 
Hash = function(oSource){ 
    for(sKey in oSource) if(Object.prototype.hasOwnProperty.call(oSource, sKey)) this[sKey] = oSource[sKey]; 
}; 
Hash.prototype = Object.create(null); 

var oHash = new Hash({foo: 'bar'}); 
oHash.foo === 'bar'; // true 
oHash['foo'] === 'bar'; // true 
oHash['meow'] = 'another prop'; // true 
oHash.hasOwnProperty === undefined; // true 
Object.keys(oHash); // ['foo', 'meow'] 
oHash instanceof Hash; // true