Я хочу проверить свою функцию, если переданный аргумент объекта типа пуст или нет. Иногда он пуст, но все еще не равен нулю, поэтому я не могу полагаться на нулевое условие. Есть ли какое-либо свойство типа 'length'/'size' для объектов flex, которые я могу использовать здесь. Пожалуйста, помогите. Спасибо заранее.Чтобы проверить, пустой объект или нет
ответ
Если вы имеете в виду, если объект не имеет свойства:
var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }
Спасибо за помощь, это было действительно полезно, но все же мы не можем иметь встроенный метод: «myObj.length»/'myObj.isEmpty' Еще раз спасибо. – Ashine
Вам нужно расширить класс 'Object' или класс' Dictionary' для получения «встроенного» метода для этого: – Amarghosh
Существует monkeypatching, но это ломается для .. в циклах, которые ... ну .. . вы знаете. –
Это некоторые серьезные хак, но вы можете использовать:
Object.prototype.isEmpty = function():Boolean {
for(var i in this)
if(i != "isEmpty")
return false
return true
}
var p = {};
trace(p.isEmpty()); // true
var p2 = {a:1}
trace(p2.isEmpty()); // false
Вау, это интересный трюк. Вы только что отправили меня на поиски, чтобы узнать о члене прототипа. Не знаю, как я могу это использовать, но это интересная битка, о которой нужно знать. – JStriedl
Я стараюсь избегать прототипов, потому что компилятор flex жалуется на многое. И я должен признать, что я являюсь автозавершением addict ... – sharvey
возможно проверить с помощью 'this.hasOwnProperty (i)', в случае других элементов прототипа. –
Зависит от того, что ваш объект, или, вернее, то, что вы ожидаете это иметь. Например, если ваш объект должен содержать некоторое свойство, называемое имя, которое вы ищете, вы можете сделать
if(objSomeItem == null || objSomeItem.name == null || objSomeItem.name.length == 0)
{
trace("object is empty");
}
или если ваш объект на самом деле должно быть что-то еще, как массив можно сделать
var arySomeItems = objSomeItem as Array;
if(objSomeItem == null || arySomeItems == null || arySomeItems.length == 0)
{
trace("object is empty");
}
Вы также можете использовать другие способы путем отражения, например ObjectUtil.getClassInfo, а затем перечислить через свойства для проверки установленных значений .... этот класс справки:
import flash.utils.describeType;
import flash.utils.getDefinitionByName;
public class ReflectionUtils
{
/** Returns an Array of All Properties of the supplied object */
public static function GetVariableNames(objItem:Object):Array
{
var xmlPropsList:XMLList = describeType(objItem)..variable;
var aryVariables:Array = new Array();
if (xmlPropsList != null)
{
for (var i:int; i < xmlPropsList.length(); i++)
{
aryVariables.push(xmlPropsList[i][email protected]);
}
}
return aryVariables;
}
/** Returns the Strongly Typed class of the specified library item */
public static function GetClassByName($sLinkageName:String):Class
{
var tObject:Class = getDefinitionByName($sLinkageName) as Class;
return tObject;
}
/** Constructs an instance of the speicified library item */
public static function ConstructClassByName($sLinkageName:String):Object
{
var tObject:Class = GetClassByName($sLinkageName);
//trace("Found Class: " + tMCDefinition);
var objItem:* = new tObject();
return objItem;
}
public static function DumpObject(sItemName:String, objItem:Object):void
{
trace("*********** Object Dump: " + sItemName + " ***************");
for (var sKey:String in objItem)
{
trace(" " + sKey +": " + objItem[sKey]);
}
}
//}
}
Еще одно замечание: вы можете использовать простой цикл для проверки свойств объектов, это то, что делает эта функция dumpobject.
Вы также можете попробовать:
ObjectUtil.getClassInfo(obj).properties.length > 0
Хорошая вещь об этом является то, что getClassInfo дает гораздо больше информации об объекте, например. вы получаете имена всех свойств объекта, которые могут пригодиться.
Спасибо U :) Это уменьшило мои усилия ... – Prax
Если объект содержит некоторый «текст», но as3 не распознает его как строку, преобразует его в строку и проверяет, является ли он пустым.
var checkObject:String = myObject;
if(checkObject == '')
{
trace('object is empty');
}
Вы можете непосредственно проверить его как следует,
var obj:Object = new Object();
if(obj == null)
{
//Do something
}
я украл из подобного вопроса, относящегося к JS. Для этого требуется библиотека FP 11+ или JSON.as.
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
- 1. @ Html.ValidationMessageFor проверить пустой или нет
- 2. Проверить объект null или нет
- 3. '1' - пустой объект или нет ... снова
- 4. Jasmine, чтобы проверить, имеет ли объект определенный метод или нет
- 5. Как проверить, выделен ли объект или нет?
- 6. Как проверить, нет ли пустого объекта или заполнен пустой опорой
- 7. Как проверить объект функции действителен или нет
- 8. JSON массив пустой или нет
- 9. Чтобы проверить, если сессия доступна или нет
- 10. Чтобы проверить, пусто ли таблица или нет
- 11. Как проверить, отображается ли URI, отображаемый java.awt.Desktop, пустой или нет
- 12. Как проверить, является ли отдельная строка данных пустой или нет?
- 13. Как проверить, пустой ли токен редактора шаблонов DNN или нет?
- 14. Как проверить, нет ли факториала или нет?
- 15. Чтобы проверить переменную, не имеет значения или нет в php
- 16. Как проверить пустой объект в шаблоне Meteor?
- 17. Пустой конструктор или нет конструктора
- 18. Проверить сеть и обработать пустой объект ошибки
- 19. Как проверить пустой объект в AngularJS зрения
- 20. Пустой объект в Coffeescript
- 21. Чтобы проверить, нет ли участка в Mathematica
- 22. Проверка, является ли строка пустой или нет
- 23. Как проверить, нет ли матрицы пустой
- 24. Как проверить объект на нуль или нет в быстром?
- 25. Как проверить, установлена ли ссылка на объект или нет
- 26. как проверить объект выходит или нет с точки зрения ROR
- 27. Javascript: как проверить пустой объект в массиве?
- 28. Как проверить, возвращает ли обещание пустой объект
- 29. Проверить, существует ли объект или нет в шаблоне вида
- 30. Как проверить, является ли объект нулевым или нет, кроме == null
Я передал ваш вопрос с коллекциями. У вас вопрос немного расплывчатый, возможно, вы можете его очистить, чтобы получить больше/лучших ответов. Используют экземпляр объекта как ассоциативный массив? Если вам нужен счет, возможно, вы вместо этого используете класс Array. Если вы описываете контекст немного лучше, вам будет легче ответить. –
Если вы используете ассоциативный массив, вы получаете то же самое, что и объект. Свойство length всегда будет возвращать 0 независимо от того, как вы набираете ключи. – sharvey
Я имел в виду не использовать ассоциативный массив, а изменять код для использования обычного массива. Ассоциативный массив указывает, что вы знаете, какие значения хранятся, и поэтому вам обычно не нужно подсчитывать. Но трудно сказать, не более подробно. –