Я реализовал тип данных набора в javascript, основанный на универсальном типе объекта, например:
function createSetFromList(list) {
var set = { };
for (var i = 0; i < list.length; i++)
set[list[i]] = true;
return set;
}
Теперь я могу легко проверить, принадлежит ли данное значение к набору:
var users = createSetFromList(my_users);
if (user in users) allow_operation = true;
Проблема, с которой я столкнулся, заключается в том, что я хотел бы проверить, пуст ли мой набор, например:
if ("users is empty" or user in users) allow_operation = true;
Но я понятия не имею, как проверить, пуст ли набор. Я пытался с:
if (users == { } || user in users) allow_operation = true;
Но, очевидно, первая часть логического выражения никогда не верна.
Я полагаю, это связано с тем фактом, что когда пользователи пустые, они все еще инициализируются как объект, без каких-либо элементов набора, и объект никогда не равен другому объекту?
Есть ли обходной путь для проверки пустоты для моей реализации набора?
РЕДАКТИРОВАТЬ: Я опробовал предложение Мальволио, и происходит нечто странное. Я немного изменил его, чтобы увидеть, что происходит:
function showProperties(v) {
for (x in v) {
if (v.hasOwnProperty(x)) {
$.log(x + " belongs");
} else {
$.log(x + " does not belong");
}
}
}
При запуске этого:
showProperties(myset);
Я всегда получаю только одну строку, независимо от того, с какими данными был инициализирован мой набор:
undefined belongs