aks*_*aks 15 javascript java dojo set
我想在JavaScript中使用可用于存储ID数量的数据结构.我应该能够检查该集合中是否存在密钥,例如Java集合.
我希望得到如下相同的行为(此代码在Java中):
Set<String> st = new HashSet<String>();
//add elemets
if(st.contains("aks") ){
//do something
}
Run Code Online (Sandbox Code Playgroud)
我想要一个JavaScript/dojo等价的上述代码.
Tim*_*own 20
我编写了一个JavaScript HashSet实现,它可以执行您想要的任务,并允许任何对象成为该集合的成员:http://code.google.com/p/jshashtable
但是,如果您只需要存储字符串,则可以通过将set成员存储为普通Object的属性名称来更简单地执行某些操作.例如:
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;
};
}
Run Code Online (Sandbox Code Playgroud)
关于实现的说明:val
是实现内部使用的对象StringSet
,每个集都是唯一的.比较其属性名称构成set(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"]
Run Code Online (Sandbox Code Playgroud)
Ali*_*aru 11
为什么不使用普通对象并检查JavaScript是否存在密钥hasOwnProperty
?
var x = {};
x['key'] = 'val';
x.hasOwnProperty('key'); // true //
x.hasOwnProperty('key2'); // false //
Run Code Online (Sandbox Code Playgroud)
这是一个更高级的用例:
var x = {};
var prefix = 'item_';
for(var i=0;i<10;i++){
x[prefix+i] = 'value '+(i+1);
}
x.hasOwnProperty('item_6'); // true //
x.hasOwnProperty('other key'); // false //
Run Code Online (Sandbox Code Playgroud)
删除项目可以这样做:
delete x['key'];
Run Code Online (Sandbox Code Playgroud)
可能使用关联数组/哈希表/字典(我不知道它到底是如何调用的),使用集合元素作为键,使用“任何其他”作为值。
insert: mySet[key] = "Whatever";
delete: mySet[key] = null;
check: if (mySet[key] != null) { ... }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27087 次 |
最近记录: |