Проверить пустую карту
У меня есть интересный вопрос, который, я уверен, легко объясняется, но объяснение ускользает от меня.
An undefined или нулевой объект в javascript равен false.
var x;
alert(!x); //returns true
alert(x==true); //returns false
Как насчет пустого объекта массива? Это эквивалент true или false?
var x = [];
alert (x==true); //returns false
alert (!x); //returns false
Если это эквивалентно true, как проверить, не является ли он пустым? Я надеялся сделать
if (!x) {
//do stuff
}
Я попытался проверить x.length
, но я использую этот объект в качестве карты:
var x = [];
alert(x.length); //returns 0
x.prop = "hello";
alert(x.length); //still returns 0
Как проверить, пуста ли моя карта?
Ответы
Ответ 1
Немного смущается, поскольку вы, кажется, смешиваете объекты и массивы в своем вопросе. Надеюсь, это поможет вам разобраться.
Пустой массив вычисляет значение true:
!![] //true
Но целое число 0 оценивается как false, поэтому вы можете сделать:
!![].length //false
Итак:
if([].length) {
//array has 1 element at least
} else {
//array has 0 elements
}
Однако, похоже, вы сбиваете с толку массивы и объекты. В JavaScript у нас есть объекты:
var x = {};
x.foo = "bar";
x.baz = 2;
И у нас есть массивы:
var x = [];
x.push("foo");
x.length //1
Вы не можете делать то, что делаете в своем открывателе:
var x = []; //x is an array
x.foo = "bar"; //can't do this on an array
x.length; // 0
Ответ 2
Это не так просто, как кажется, вам нужно проверить, что объект имеет хотя бы одно свойство.
jQuery предоставляет isEmptyObject
для этой цели:
function isEmptyObject( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
Использование образца:
> var x = [];
> x.prop = "hello";
> isEmptyObject(x);
false
Ответ 3
если вы используете JQuery
jQuery.isEmptyObject(obj)
Если нет, вы можете реализовать свой собственный
isEmptyObject = function(obj) {
for (key in obj) {
if (obj.hasOwnProperty(key)) return false;
}
return true;
};
Ответ 4
Прежде всего, вы используете Array, а не карту. Карта будет экземпляром объекта:
var x = {};
x.prop = "5";
Ваш код действителен, так как массивы также являются объектами. Вы можете проверить, пуст ли ваш объект в ответ на этот вопрос.
Ответ 5
Если вы используете собственный JS Map<K, V>
Object, вы можете просто использовать API-интерфейс карты Документы Mozilla.
В частности, существует свойство Map.prototype.size
, а также метод Map.prototype.entries()
, который, как мне кажется, возвращает Array []
ключей. Если это length 0
, то отображение пуст.
Ответ 6
* Если пустой список даст true (if (array1)
).
* x.prop
на самом деле не добавляет никаких элементов в массив, он просто присваивает значение "hello" свойству x массива, но массив по-прежнему пуст. Поэтому вы все равно должны использовать .length
для проверки, что массив пуст.