Frage

Ich bin mit einer Hash-Tabelle in JavaScript, und ich möchte die Werte des folgend in einer Hash-Tabelle zeigen

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

Ich habe den folgenden Code gefunden. Es funktioniert für die folgenden Daten.

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

Wie ordne ein- I [1,2] -Werte in einer Hash-Tabelle und wie kann ich darauf zugreifen?

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

Wie kann ich es tun?

War es hilfreich?

Lösung

die Funktion oben verwenden, würden Sie tun:

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

Natürlich würde auch Folgendes funktionieren:

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

, da alle Objekte in JavaScript sind Hash-Tabellen! Es wäre jedoch schwieriger sein, da foreach(var item in object) auch Sie alle Funktionen würden mit iterieren bekommen, etc., aber das könnte je nach Bedarf ausreichen.

Andere Tipps

Wenn alles, was Sie tun möchten, ist einige statische Werte in einer Verweistabelle gespeichert werden, können Sie eine Objektliteral (das gleiche Format verwendet von JSON ) es kompakt zu tun:

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

Und dann greifen Sie JavaScript assoziative Array-Syntax:

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

Sie könnte meine JavaScript-Hash-Tabelle Implementierung verwenden, jshashtable . Es erlaubt ein beliebiges Objekt als Schlüssel verwendet werden, nicht nur Strings.

Das Javascript-Interpreter speichert native Objekte in einer Hash-Tabelle. Wenn Sie sich Sorgen um Verunreinigungen von der Prototypkette sind, können Sie immer etwas tun:

// 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top