Hallo,
Array.prototype.add = function (key, value)
{
this.push (key);
this[key] = value;
}
Ist dir der Unterschied zwischen einem Array und einem Hash/Hashmap bewusst?
Deine Beispiele scheinen beides zu verwechselnMeine Änderungen an den Methoden sollten jetzt stimmen, oder was meinst Du?
Soweit ich das sehe, lässt sich das, was du zu erreichen versuchst, viel einfacher lösen. Du brauchst keine eigenen Methoden am Array-Prototyp dazu.
In obiger Methode verwendest du einen Array als Array und gleichzeitig als Hash. Du erzeugt mit push() eine numerische Eigenschaft und speicherst darin den Key, dann setzt du eine weitere Eigenschaft mit Key und Value. Warum dieser Aufwand? Warum nimmst du keinen einfaches Object als Hash?
Noch einmal zur Erklärung:
// Object erzeugen
var obj = {};
// Wert unter Schlüssel speichern
var key = "foo", value = 1;
obj[key] = value;
// Prüfen, ob ein Eintrag unter einem gegebenen Schlüssel existiert
alert(obj.hasOwnProperty(key));
// oder
alert(key in obj);
// Eintrag löschen
delete obj[key];
Die Prüfung, ob ein Wert unter einem beliebigen Wert existiert, kann über eine for-in-Schleife erfolgen:
function valueExists (hash, value) {
for (var key in hash) {
if (hash.hasOwnProperty(key) && hash[key] === value) {
return true;
}
}
return false;
}
Wobei in deinem Falle das Nachschlagen mit Schlüssel auszureichen scheint.
Grüße
Mathias