2009-01-19 93 views
40

Estoy utilizando una tabla hash en JavaScript, y quiero mostrar los valores de la siguiente en una tabla hashtabla hash en JavaScript

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

He encontrado el siguiente código. Funciona para los siguientes datos.

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

¿Cómo asigno uno- [1,2] valores a una tabla hash y cómo puedo acceder a ella?

<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> 

¿Cómo lo hago?

Respuesta

71

Usando la función anterior, que haría:

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

Por supuesto, el siguiente también funcionaría:

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

ya que todos los objetos en JavaScript son tablas hash! Sin embargo, sería más difícil iterar ya que al usar foreach(var item in object) también obtendría todas sus funciones, etc., pero eso podría ser suficiente dependiendo de sus necesidades.

+21

teclas = Object.keys (myHash) dará una una matriz de las teclas, por lo que en este caso sería volver ['uno dos tres']. Puede iterar en ellos usando for (var i = 0; i zupa

+0

No encuentro Hash en javascript. (El hash no está definido.) ¿Puede proporcionar el enlace – jforjs

+1

@jforjs? Se refiere a la función Hash declarada en la pregunta. "Usando la función de arriba ..." – estevan

32

Si todo lo que quiero hacer es almacenar algunos valores estáticos en una tabla de búsqueda, se puede utilizar un Object Literal (el mismo formato utilizado por JSON) para hacerlo de forma compacta:

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

Y luego acceder a ellos utilizando asociativo sintaxis de matrices de JavaScript:

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

Ese es un objeto literal, no JSON. JSON es un formato de datos. –

8

Usted podría utilizar mi aplicación JavaScript tabla hash, jshashtable. Permite que cualquier objeto se use como clave, no solo como cadenas.

2

El intérprete de Javascript almacena objetos de forma nativa en una tabla hash. Si usted está preocupado acerca de la contaminación de la cadena de prototipo, siempre se puede hacer algo como esto:

// 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