Цитата: 
	
 Как это происходит в обычном операторе сравнения?)  | 
	
		
 Цитата: 
	
  | 
	
		
 сравнить таблицы с вложенными таблицами, это просто. 
	Но дело том что они могут быть цикличными. тут происходит анализ на цикличность.. и если наш скрипт смотрит что ссылка ведет на обьект который уже был получен ранее (фиксируется кольцевание кольцевание) , и этот обьект щас в стеке проверки. то тогда сравниваются названия ключей этого обьекта(из стека) и сравниваемого обьекта. если есть разница в названиях ключей, то обьекты не равны. если нет разницы, но кольцевание продолжается, тогда обьекты считаются разными, и продолжается анализ дальше, если там не найдено расхождений. то обьекты считаются раЗными из-за неопределенности. Иными словами таким методом хорошо закрученные обьекты не сравнить. Это ЕСЛИ этот метод на js делать, а если делать на уровне движка, то тут любые обьекты сравнить можно.  | 
	
		
 Цитата: 
	
 JS - тьюринг полный, так что на нем можно решить тот же класс задач, что и на уровне движка. Так что "хорошо закрученные объекты" можно с одинаковым успехом сравнивать как на уровне движка, так и на уровне JS Тот алгоритм, который ты привел - не позволяет их сравнить. [telepatemode] Может быть тебе не хватает функции получения адреса объекта в памяти? Средствами JS вполне можно написать функцию, возвращающую "виртуальный" адрес в памяти, основываясь на стандартном операторе сравнения объектов. Но, это так - предположение чего тебе не хватает. [/telepatemode] В общем все-таки хотелось бы увидеть алгоритм для "хорошо закрученных объектов"  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 У вас спросили, как бы вы сравнивали два объекта с рекурсивными ссылками, а я развил эту мысль. А развил я ее, потому что интересующий вас механизм сравнения объектов не является таким уж очевидным с точки зрения алгоритма. Практической пользы для меня от данного алгоритма - ноль Чисто академический интерес, потому что я не вижу однозначного алгоритма, который бы работал для таких сложных объектов. В вас же я заметил как практический, так и академический интерес к этой задаче. Возможно и ошибся) Поэтому, я и предложил вам формализовать ваш алгоритм до конца. Если вам этот алгоритм не нужен, и вам в практических целях достаточно стандартного сравнения объектов, то можете не реализовывать его. А если все-таки нужен, то я бы с удовольствием посмотрел бы на вашу реализацию - потому что сам я пока не смог придумать алгоритм, решающий данную задачу.  | 
	
		
 Gvozd - рассматривать объект как граф и помечать посещённые узлы, как-то так. Но алгоритм будет... Пиздец) 
	 | 
	
		
 trikadin, 
	Это вроде уже есть, хоть и не в форме кода. Хоть и не зацикливается, но толку от алгоритма пока мало, ибо на циклических объектах он вполне может показать неопредленный результат  | 
	
		
 Gvozd, ну я же говорю - пиздец. Я бы за такое тысяч за 20-30 взялся, вряд ли меньше... 
	 | 
	
		
 Цитата: 
	
 И если подходить к вопросу таким образом, то сравнение провести можно просто. Другое дело - нафига оно надо?)  | 
	
		
 Цитата: 
	
 то есть в примере выше, например, обнаружена цикличность, теперь проверяется РАВНЫ ЛИ ОСТАЛЬНЫЕ СВОЙСТВА этой цикличности, если равны то и цикличности равны)), в данном случае свойств кроме цикличных - нет.  | 
	
		
 Вообще что-то я не оч понимаю в чем заморочка. Если есть рекурсия, то коли она находится в обоих объектах на одном и том же месте и ведёт на один и тот же уровень - они, по данной логике, равны. 
	Те навскидку можно так(без учёта нод, ибо лень и сложно): 
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())
 | 
	
		
 Цитата: 
	
  | 
| Часовой пояс GMT +3, время: 04:29. |