我已经编写了一个JavaScript HashSet实现,它可以做你想要的,并允许任何对象成为集合的成员:http://code.google.com/p/jshashtable
但是,如果只需要存储字符串,则可以通过将 set 成员存储为普通对象的属性名称来执行更简单的操作。例如:
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;
};
}
关于实现的说明:是实现内部使用的对象,对于每个集合都是唯一的。比较其属性名称构成集合 () 的对象的属性值,从而无需进行检查,并保证只有已添加到集合中的字符串才会显示在 中。val
StringSet
setObj
val
hasOwnProperty()
values
用法示例:
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"]