He escrito una aplicación JavaScript HashSet que hace lo que quiere y permite que cualquier objeto a ser un miembro del conjunto: http://code.google.com/p/jshashtable
Sin embargo, si sólo necesita almacenar cadenas, se podría hacer algo más simple almacenando los miembros del conjunto como nombres de propiedad de un Objeto normal. Por ejemplo:
function StringSet() {
var setObj = {}, val = {};
this.add = function(str) {
setObj[str] = val;
};
this.contains = function(str) {
return setObj[str] === val;
};
this.remove = function(str) {
delete setObj[str];
};
this.values = function() {
var values = [];
for (var i in setObj) {
if (setObj[i] === val) {
values.push(i);
}
}
return values;
};
}
Una nota acerca de la aplicación: val
es un objeto utilizado internamente por la aplicación StringSet
que es único para cada conjunto. La comparación de los valores de propiedad del objeto cuyos nombres de propiedad constituyen el conjunto (setObj
) contra val
elimina la necesidad de una verificación hasOwnProperty()
y garantiza que solo las cadenas que se hayan agregado al conjunto aparecerán en values
.
Ejemplo de uso:
var set = new StringSet();
set.add("foo");
set.add("bar");
alert(set.contains("foo")); // true
alert(set.contains("baz")); // false
set.values(); // ["foo", "bar"], though not necessarily in that order
set.remove("foo");
set.values(); // ["bar"]
gracias por responder. Pero ¿cómo puedo comprobar si contiene una clave? – aks
quiero lograrlo en javascript – aks
Ver la última edición, intenté aclarar. –