Я прочитав рішення і спробував деякі. Спробувавши використати object[key]
метод, я зрозумів, що він не спрацює. Я хотів HashSet, який міг би зберігати елементи HTML. При додаванні цих об'єктів 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);
};
};