41 votes

Table de hachage en JavaScript

J'utilise une table de hachage en JavaScript et je souhaite afficher les valeurs des éléments suivants dans une table de hachage

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

J'ai trouvé le code suivant. Il fonctionne pour les données suivantes.

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

Comment attribuer des valeurs de type 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 dois-je m'y prendre ?

74voto

roryf Points 14520

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 pourrait également fonctionner :

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 dessus, car l'utilisation de foreach(var item in object) vous obtiendrait également toutes ses fonctions, etc., mais cela pourrait suffire en fonction de vos besoins.

32voto

scraimer Points 7000

Si tout ce que vous voulez faire est de stocker certaines valeurs statiques dans une table de consultation, vous pouvez utiliser un fichier de type Objet Littéral (le même format que celui utilisé par JSON ) pour le faire de manière compacte :

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

Puis, vous pouvez 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

8voto

Tim Down Points 124501

Vous pouvez utiliser mon implémentation de table de hachage JavaScript, jshashtable . Il permet d'utiliser n'importe quel objet comme clé, et pas seulement des chaînes de caractères.

5voto

Alec Points 143

L'interpréteur Javascript stocke nativement les objets dans une table de hachage. Si vous craignez une contamination par 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X