я реализовал множество типов данных в JavaScript, основанный в родовом типе объекта, например:Пустой набор в 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;
Но, по-видимому, первая часть логического выражения никогда не верна.
Я полагаю, что это связано с тем, что, когда пользователи пусты, он все еще инициализируется как объект без каких-либо заданных элементов, а объект никогда не равен другому объекту?
Есть ли какое-либо обходное решение для проверки пустоты для моей реализации?
EDIT: Я опробовал предложение Мальволио, и что-то странное происходит. Я изменил его немного, чтобы увидеть, что происходит:
function showProperties(v) {
for (x in v) {
if (v.hasOwnProperty(x)) {
$.log(x + " belongs");
} else {
$.log(x + " does not belong");
}
}
}
При выполнении этого:
showProperties(myset);
Я всегда получаю только одну строку, независимо, с которой данные мой набор был инициализирован:
undefined belongs
возможно дублировать [Как проверить пустой объект Javascript из JSON?] (http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json) –
Примечание. что имена объектов объекта должны быть строками или цифрами, поэтому вы должны перегружать 'toString', чтобы возвращать уникальную строку для любого объекта, который может быть добавлен в набор. – outis
Номера на самом деле тоже toString'd, т. Е. При использовании в массивах – meandmycode