Question

J'utilise une table de hachage en JavaScript et je souhaite afficher les valeurs suivantes 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 une valeur [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?

Était-ce utile?

La solution

En utilisant la fonction ci-dessus, vous feriez:

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

Bien entendu, les éléments suivants fonctionneraient également:

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 de le parcourir car utiliser foreach (élément var dans un objet) vous donnerait également toutes ses fonctions, etc., mais cela pourrait suffire selon vos besoins.

Autres conseils

Si vous ne souhaitez que stocker des valeurs statiques dans une table de recherche, vous pouvez utiliser un Littéral d'objet (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] }

Ensuite, accédez-y à l'aide de la syntaxe de tableau associatif JavaScript:

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

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

L’interprète 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top