Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 28.12.2011, 02:26
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

trikadin,
Это вроде уже есть, хоть и не в форме кода.
Хоть и не зацикливается, но толку от алгоритма пока мало, ибо на циклических объектах он вполне может показать неопредленный результат
Ответить с цитированием
  #52 (permalink)  
Старый 28.12.2011, 02:31
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Gvozd, ну я же говорю - пиздец. Я бы за такое тысяч за 20-30 взялся, вряд ли меньше...
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #53 (permalink)  
Старый 28.12.2011, 03:36
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,576

Сообщение от Gvozd Посмотреть сообщение
Все-таки как ваш алгоритм от работает на примере?
var a = {};//адрес - 0x0008
var b = {};//адрес - 0x00A8
a.a = a;
b.a = b;
alert(a == b)

И что дальше?
равны текущие свойства или нет? Если да, то почему?
Вообще если сравнивать формально как и желает того оп, то да, они равны ибо значения ключей имеют одинаковый смысл на данный момент времени. Где они там в памяти и как ссылаются сейчас не имеет значения.
И если подходить к вопросу таким образом, то сравнение провести можно просто.

Другое дело - нафига оно надо?)
__________________
29375, 35
Ответить с цитированием
  #54 (permalink)  
Старый 28.12.2011, 07:31
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от trikadin Посмотреть сообщение
Gvozd - рассматривать объект как граф и помечать посещённые узлы, как-то так. Но алгоритм будет... Пиздец)
именно графами я бы и определял цикличность))

то есть в примере выше, например, обнаружена цикличность, теперь проверяется РАВНЫ ЛИ ОСТАЛЬНЫЕ СВОЙСТВА этой цикличности, если равны то и цикличности равны)), в данном случае свойств кроме цикличных - нет.
Ответить с цитированием
  #55 (permalink)  
Старый 28.12.2011, 14:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,576

Вообще что-то я не оч понимаю в чем заморочка. Если есть рекурсия, то коли она находится в обоих объектах на одном и том же месте и ведёт на один и тот же уровень - они, по данной логике, равны.
Те навскидку можно так(без учёта нод, ибо лень и сложно):
Object.prototype.toString=function(){
  var objects=[];
  return function(){
    var n=objects.indexOf(this);
    if(n>-1)return '[recursion up to level '+n+']';
    objects.push(this);
    var str='{', j;
    for(j in this)str+='\''+j+'\': '+this[j]+',';
    objects.pop();
    return str.slice(0,-1)+'}';
  }
 }();
var a = {ня:3};
var b = {ня:3,'a':a};
a.a = b;
alert(a.toString() == b.toString())
alert(a.toString() +'\n\n'+ b.toString())
__________________
29375, 35

Последний раз редактировалось Aetae, 28.12.2011 в 14:18.
Ответить с цитированием
  #56 (permalink)  
Старый 28.12.2011, 14:26
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от Aetae
Если есть рекурсия, то коли она находится в обоих объектах на одном и том же месте и ведёт на один и тот же уровень - они, по данной логике, равны.
ДА, ИМЕННО, тут и значение получать не нужно, главное чтобы они вели на РАВНЫЕ объектыи главное проверить это раньше чем будут обнаружены кольца и начнется их анализ. Так оптимальнее.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск