Hash-Tabelle in JavaScript
-
19-08-2019 - |
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?
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