2009-01-19 8 views
40

J'utilise une table de hachage en JavaScript, et je veux montrer les valeurs de ce qui suit dans une table de hachagetable de Hash en JavaScript

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

J'ai trouvé le code suivant. Cela fonctionne pour les données suivantes. Comment assigner des valeurs d'une [1,2] à une table de hachage et comment y accéder? Comment faire pour attribuer des valeurs de [1, 2] à une table de hachage?

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

Comment faire?

Répondre

71

En utilisant la fonction ci-dessus, vous feriez:

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

Bien sûr, ce qui suit travaillerions aussi:

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

puisque tous les objets JavaScript sont des tables de hachage! Il serait, cependant, plus difficile à itérer, car l'utilisation de foreach(var item in object) vous permettrait également d'obtenir toutes ses fonctions, etc., mais cela pourrait suffire selon vos besoins.

+21

clés = Object.keys (myHash) donnera un un tableau des clés, donc dans ce cas, il reviendrait ['un deux trois']. Vous pouvez ensuite itérer sur eux en utilisant pour (var i = 0; i zupa

+0

Je ne trouve pas Hash dans javascript. (Hash n'est pas défini.) Pouvez-vous fournir le lien – jforjs

+1

@jforjs il fait référence à la fonction Hash déclarée dans la question. "Utilisation de la fonction ci-dessus ..." – estevan

32

Si tout ce que vous voulez faire est de stocker certaines valeurs statiques dans une table de consultation, vous pouvez utiliser un Object Literal (le même format utilisé par JSON) pour le faire de façon compacte:

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

Et puis accéder à l'aide Syntaxe de tableau associatif de JavaScript:

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

C'est un littéral d'objet, pas JSON. JSON est un format de données. –

8

Vous pouvez utiliser l'implémentation de ma table de hachage JavaScript, jshashtable. Il permet à n'importe quel objet d'être utilisé comme une clé, pas seulement des chaînes.

2

L'interpréteur Javascript stocke nativement des objets dans une table de hachage. Si vous êtes inquiet de la contamination de la chaîne prototype, vous pouvez toujours faire quelque chose comme ceci:

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