Skip to content

Instantly share code, notes, and snippets.

@asci
Created September 12, 2012 08:36
Show Gist options
  • Save asci/3705266 to your computer and use it in GitHub Desktop.
Save asci/3705266 to your computer and use it in GitHub Desktop.
Сравнение моделей
// Если модели не равны — возвращается false
public static function isModelAndDataEquals(model:BaseModel, data:*):Boolean {
var res:Boolean,
i:int;
for (var prop:String in model) {
if (model.hasOwnProperty(prop)) {
if (data.hasOwnProperty(prop)) {
// Если модель
if (model[prop] is BaseModel) {
res = BaseModel.isModelAndDataEquals(model[prop], data[prop]);
if (!res) {
return false;
}
}
// Если вектор моделей
if (model[prop] is Vector) {
// Не совпадает длина векторов
if ((model[prop] as Vector).length != data[prop].length) {
return false;
}
// Убеждаемся, что там точно модели и по циклу их сравниваем
if ((model[prop] as Vector).length && (model[prop] as Vector)[0] is BaseModel) {
for (i = 0; i < (model[prop] as Vector).length; i++) {
res = BaseModel.isModelAndDataEquals(model[prop][i], data[prop][i]);
if (!res) {
return false;
}
}
}
}
if (model[prop] is Array) {
// Не совпадает длина массивов
if ((model[prop] as Array).length != data[prop].length) {
return false;
}
// Сверяем содержимое элементов массива
if ((model[prop] as Array).length) {
for (var i:int = 0; i < (model[prop] as Array).length; i++) {
if (!model[prop][i] != data[prop][i]) {
return false;
}
}
}
}
// Если простое свойство
if ((typeof model[prop] == 'string') || (typeof model[prop] == 'number')) {
if (data[prop] != model[prop]) {
return false;
}
}
}
}
}
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment