我有几千个整数键的列表。我唯一需要处理的就是说列表中是否有给定的值。
对于C#,我将使用HashSet
来快速进行查找。什么是JavaScript等效项?
最低支持级别:IE 9 +,jQuery(当前)
我有几千个整数键的列表。我唯一需要处理的就是说列表中是否有给定的值。
对于C#,我将使用HashSet
来快速进行查找。什么是JavaScript等效项?
最低支持级别:IE 9 +,jQuery(当前)
Answers:
在后台,JavaScript对象是通过哈希表实现的。所以,你的那Key:Value
对(your integer):true
恒定时间查找功能可以实现为:
var hash = {
1:true,
2:true,
7:true
//etc...
};
var checkValue = function(value){
return hash[value] === true;
};
checkValue(7); // => true
checkValue(3); // => false
Set
,这Map
是最好的选择。
实际上,JavaScript提供了一个Set对象,使用起来相当简单:
var set = new Set();
set.add(1);
set.add(2);
set.has(1) // true
不幸的是,它与IE9不兼容。
使用一个对象。要将密钥添加到集合中,请执行以下操作:
object[key] = true;
要测试密钥是否在集合中,请执行以下操作:
if (object.hasOwnProperty(key)) { ... }
要从集合中删除密钥,请执行以下操作:
delete object[key]
unset
?运算符delete
在JS中!
object.hasOwnProperty(key)
。否则,"toString" in object == true
。
您可以仅使用常规JavaScript对象和'in'关键字来查看该对象是否具有特定键。
var myObj = {
name: true,
age: true
}
'name' in myObj //returns true;
'height' in myObj // returns false;
或者,如果您知道您将在对象中使用可能在JavaScript对象属性中构建的键,则使用...
var myObj = {
name: true,
age: true
}
myObj.hasOwnProperty('name') //returns true;
myObj.hasOwnProperty('height') // returns false;
我已经阅读了解决方案,并尝试了一些。尝试使用该object[key]
方法后,我意识到它行不通。我想要一个可以存储HTML元素的HashSet。当添加这些对象时,它key
被翻译成字符串,因此我想出了自己的基于jQuery的集合。它支持add
,remove
,contains
和clear
。
var HashSet = function () {
var set = [];
this.add = function (obj) {
if (!this.contains(obj)) {
set.push(obj);
}
};
this.remove = function (obj) {
set = jQuery.grep(set, function (value) {
return value !== obj;
});
};
this.clear = function () {
set = [];
};
this.contains = function (obj) {
return $.inArray(obj, set) > -1;
};
this.isEmpty = function () {
return set.length === 0;
};
};
注意
向$('#myElement')
集合中添加类似内容时,应添加真实的HTML元素$('#myElement')[0]
。哦...而且,如果您想保留已更改控件的列表,请使用元素的名称(给我一个:radio
控件问题)。
注意2
我认为object[key]
整数可能会更快。
注意3
如果仅存储数字或字符串,则此设置将更快:
var HashSet = function () {
var set = {};
this.add = function (key) {
set[key] = true;
};
this.remove = function (key) {
delete set[key];
};
this.clear = function () {
set = {};
};
this.contains = function (key) {
return set.hasOwnProperty(key);
};
this.isEmpty = function () {
return jQuery.isEmptyObject(set);
};
};