![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2013
Сообщений: 4
|
Описанный метод проверяет имена объектов массива list на полное соответствие с элементами массива jointList путем поочередного сравнения. Есть ли какой-то более простой способ делать подобные сравнения? Может быть есть какие-то базовые методы для этих целей?
jointList = new Array() jointList["Spinpoint"] = ["mountpoint","reciever"] function checkJoints(list){ var match:Number for (_jname in jointList){ match = 0 trace("checking "+_jname) for (_type in jointList[_jname]){ for(_obj in list){ if (list[_obj].name == jointList[_jname][_type]){ match++ if( match == jointList[_jname].length ){ trace(_jname+" full match") } } } } } } |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Spellbreaker, для ассоциативного массива проще использорвать объект:
Я не совсем понимаю, что вы пытаетесь сравнить. Ну а вообще поочередное сравнение вполне нормальная практика. Если вам нужен логический результат — сравниваете только до первого несоответствия, к примеру. Еще вариант (не заню только, насколько удачный) — сравнивать строки, если вы поля сравниваете: function objectFieldsToString(object:Object):String{ var returnString:String = ""; for(var i in object){ returnString += i; } return returnString; } И еще. Насчет вашего примера, — много циклов. Лучше бы разбить на методы типа такого: function fieldInObject(object:Object, field:String):Boolean{ return object[field] != null; } function valuesEqualInObjectsFields(objects:Array, field:String):Boolean{ var totalObjects:Number = objects.length; for(var k:Number = 0; k < totalObjects; k++){ var object_1:Object = objects[k]; for(var j:Number = 0 ; j < totalObjects; j++){ if(k != j){ if(object_1[field] != objects[j][field]){ return false; } } } } return true; }
__________________
hauts.ru |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 4
|
Описанный в методе алгоритм проверяет на принадлежность к условному типу, в примере "Spinpoint", путем сравнения имен объектов из полученного массива со строками "Spinpoint". Для этого объявлена переменная, считающая количество соответствий. Таким образом если счетчик равен числу строк в условном типе, то полученный массив условно считается типом "Spinpoint" и дальше уже исполняется программная логика.
В любом случае, речь идет не об оптимизации, алгоритм работает так, как задумано, вопрос лишь в том, есть ли нативный метод, для решения таких задач. Просто у меня закралось подозрение, что он есть, а я изобретаю велосипед =) |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Это как оператор "is"?
То есть вы методом описания нужных полей и последующим сравнением проверяете, является ли сущность идентичной по структуре с той, которая вам нужна? Условный тип... Может классами оперировать все-таки?
__________________
hauts.ru |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 4
|
Я неспроста использовал слово "условный", так логичнее воспринимается суть сравнения. Классы являются всем, что наследуют, следовательно при таком сравнении, даже "чистые" экземпляры классов сравнивались бы по тому же принципу, но уже с классом вместо имени объекта.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|