Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   alert({ня:3} == {ня:3})//false (https://javascript.ru/forum/misc/24306-alert-%7Bnya-3%7D-%3D%3D-%7Bnya-3%7D-false.html)

Gvozd 27.12.2011 13:48

Цитата:

Сообщение от Livaanderiamarum
не равны потому что разная память. не продолжаем потому что обнаружено кольцо.

Почему бы по факту разной памяти не остановится на первом же шаге, при проверке исходных объектов?)
Как это происходит в обычном операторе сравнения?)

Livaanderiamarum 27.12.2011 13:52

Цитата:

Сообщение от Gvozd (Сообщение 146411)
Почему бы по факту разной памяти не остановится на первом же шаге, при проверке исходных объектов?)
Как это происходит в обычном операторе сравнения?)

ой, точно я не понял сначала вопроса. в общем у меня есть вариант как это сделать просто расписывать лень. или все же расписать?

Livaanderiamarum 27.12.2011 13:55

сравнить таблицы с вложенными таблицами, это просто.
Но дело том что они могут быть цикличными. тут происходит анализ на цикличность.. и если наш скрипт смотрит что ссылка ведет на обьект который уже был получен ранее (фиксируется кольцевание кольцевание) , и этот обьект щас в стеке проверки. то тогда сравниваются названия ключей этого обьекта(из стека) и сравниваемого обьекта. если есть разница в названиях ключей, то обьекты не равны. если нет разницы, но кольцевание продолжается, тогда обьекты считаются разными, и продолжается анализ дальше, если там не найдено расхождений. то обьекты считаются раЗными из-за неопределенности. Иными словами таким методом хорошо закрученные обьекты не сравнить. Это ЕСЛИ этот метод на js делать, а если делать на уровне движка, то тут любые обьекты сравнить можно.

Gvozd 27.12.2011 15:02

Цитата:

Сообщение от Livaanderiamarum
Это ЕСЛИ этот метод на js делать, а если делать на уровне движка, то тут любые обьекты сравнить можно.

А какое алгоритмическое преимущество даст уровень движка для этой задачи?
JS - тьюринг полный, так что на нем можно решить тот же класс задач, что и на уровне движка.
Так что "хорошо закрученные объекты" можно с одинаковым успехом сравнивать как на уровне движка, так и на уровне JS
Тот алгоритм, который ты привел - не позволяет их сравнить.

[telepatemode]
Может быть тебе не хватает функции получения адреса объекта в памяти?
Средствами JS вполне можно написать функцию, возвращающую "виртуальный" адрес в памяти, основываясь на стандартном операторе сравнения объектов.
Но, это так - предположение чего тебе не хватает.
[/telepatemode]

В общем все-таки хотелось бы увидеть алгоритм для "хорошо закрученных объектов"

Livaanderiamarum 27.12.2011 15:06

Цитата:

Сообщение от Gvozd (Сообщение 146431)
А какое алгоритмическое преимущество даст уровень движка для этой задачи?
JS - тьюринг полный, так что на нем можно решить тот же класс задач, что и на уровне движка.
Так что "хорошо закрученные объекты" можно с одинаковым успехом сравнивать как на уровне движка, так и на уровне JS
Тот алгоритм, который ты привел - не позволяет их сравнить.

[telepatemode]
Может быть тебе не хватает функции получения адреса объекта в памяти?
Средствами JS вполне можно написать функцию, возвращающую "виртуальный" адрес в памяти, основываясь на стандартном операторе сравнения объектов.
Но, это так - предположение чего тебе не хватает.
[/telepatemode]

В общем все-таки хотелось бы увидеть алгоритм для "хорошо закрученных объектов"

давайте напишем?

trikadin 27.12.2011 15:12

Цитата:

Сообщение от Livaanderiamarum
давайте напишем?

Так пиши)) Тебе же нужно))

Gvozd 27.12.2011 15:25

Цитата:

Сообщение от trikadin
Так пиши)) Тебе же нужно))

+1

Livaanderiamarum 27.12.2011 16:06

Цитата:

Сообщение от Gvozd (Сообщение 146442)
+1

так пиши! тебе же хотелось бы увидеть) че тупишь то) не в обиду! если не понятна нить разговора то перечитывай тред)!

Gvozd 28.12.2011 01:28

Цитата:

Сообщение от Livaanderiamarum
так пиши! тебе же хотелось бы увидеть) че тупишь то) не в обиду! если не понятна нить разговора то перечитывай тред)!

Как я понял из треда, ты считаешь существующий механизм сравнения объектов неудобным/неправильным, и противопоставляешь ему сравнение, которое выдало бы для двух объектов с одинаковой структурой, что они равны.
У вас спросили, как бы вы сравнивали два объекта с рекурсивными ссылками, а я развил эту мысль.
А развил я ее, потому что интересующий вас механизм сравнения объектов не является таким уж очевидным с точки зрения алгоритма.

Практической пользы для меня от данного алгоритма - ноль
Чисто академический интерес, потому что я не вижу однозначного алгоритма, который бы работал для таких сложных объектов.

В вас же я заметил как практический, так и академический интерес к этой задаче. Возможно и ошибся)

Поэтому, я и предложил вам формализовать ваш алгоритм до конца.
Если вам этот алгоритм не нужен, и вам в практических целях достаточно стандартного сравнения объектов, то можете не реализовывать его.
А если все-таки нужен, то я бы с удовольствием посмотрел бы на вашу реализацию - потому что сам я пока не смог придумать алгоритм, решающий данную задачу.

trikadin 28.12.2011 01:42

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


Часовой пояс GMT +3, время: 20:54.