Table de hachage en JavaScript

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

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

, j'ai trouvé le code suivant. Cela fonctionne pour les données suivantes.

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

Comment attribuer des valeurs one-[1,2] à une table de hachage et comment y accéder?

<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 puis-je le faire?

40
demandé sur Peter Mortensen 2009-01-19 11:54:35

4 réponses

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 fonctionnerait aussi:

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

Puisque tous les objets en JavaScript sont des tables de hachage! Il serait cependant plus difficile d'itérer car l'utilisation de foreach(var item in object) vous obtiendrait également toutes ses fonctions, etc. mais cela peut être suffisant en fonction de vos besoins.

72
répondu roryf 2013-04-20 05:35:03

Si tout ce que vous voulez faire est de stocker des valeurs statiques dans une table de recherche, vous pouvez utiliser un objet littéral (le même format utilisé par JSON) pour le faire de manière compacte:

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

Et ensuite y accéder en utilisant la syntaxe de tableau associatif de JavaScript:

alert(table['one']);    // Will alert with [1,10,5]
alert(table['one'][1]); // Will alert with 10
32
répondu Shalom Craimer 2014-02-20 14:09:28

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

8
répondu Tim Down 2010-07-08 22:05:59

L'interpréteur Javascript stocke nativement les objets dans une table de hachage. Si vous êtes inquiet de la contamination de la chaîne de prototypes, 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
2
répondu anarchocurious 2013-07-25 19:48:40