Подтвердить что ты не робот

Сравнить 2 объекта JSON

Возможный дубликат:
Сравнение объектов в JavaScript

Есть ли какой-либо метод, который принимает 2 объекта JSON и сравнивает 2, чтобы увидеть, изменились ли какие-либо данные?

Edit

После рассмотрения комментариев требуется некоторое разъяснение.

  • Объект JSON определяется как

    "неупорядоченный набор пар имя/значение. Объект начинается с {(левая скобка) и заканчивается на} (правая фигурная скобка). каждый за именем следует: (двоеточие) и пары имя/значение разделяются, (запятая)." - json.org

  • Моя цель состоит в том, чтобы иметь возможность сравнивать 2 объектных литералов JSON, просто поставить.

Я не гуру javascript, поэтому, если в javascript это объектные литералы, то я полагаю, что я должен их назвать.

Я считаю, что я ищу способ, способный:

  • Глубокая рекурсия для поиска уникальной пары имя/значение
  • Определите длину обоих объектных литералов и сравните пары имя/значение, чтобы увидеть, существует ли несоответствие.
4b9b3361

Ответ 1

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

Вам нужно сделать глубокие равенства.

От http://threebit.net/mail-archive/rails-spinoffs/msg06156.html - это похоже на использование jQuery.

Object.extend(Object, {
   deepEquals: function(o1, o2) {
     var k1 = Object.keys(o1).sort();
     var k2 = Object.keys(o2).sort();
     if (k1.length != k2.length) return false;
     return k1.zip(k2, function(keyPair) {
       if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
         return deepEquals(o1[keyPair[0]], o2[keyPair[1]])
       } else {
         return o1[keyPair[0]] == o2[keyPair[1]];
       }
     }).all();
   }
});

Usage:

var anObj = JSON.parse(jsonString1);
var anotherObj= JSON.parse(jsonString2);

if (Object.deepEquals(anObj, anotherObj))
   ...