数千の整数キーのリストがあります。このリストで行う必要があるのは、指定された値がリストにあるかどうかだけです。
C#の場合、HashSet
を使用して検索を高速化します。 JavaScriptと同等のものは何ですか?
最小サポートレベル:IE 9+、jQuery(current)
内部では、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
実際、JavaScriptには Set object が用意されており、非常に簡単に使用できます。
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]
通常の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;
マップ、またはWeakMapを反復する必要がない場合
let m1=new Map();
m1.set('isClosed',false);
m1.set('isInitialized',false);
m1.set('isClosed',true);
m1.forEach(function(v,k)
{
console.log(`${k}=${v}`);
});
私は解決策を読み、いくつか試してみました。 _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]
_は整数の方が速いと思います。
注
数字または文字列のみを保存する場合、このセットは高速になります。
_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);
};
};
_