Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Сравнение объектов (https://javascript.ru/forum/css-html/73638-sravnenie-obektov.html)

dakociha 02.05.2018 17:09

Сравнение объектов
 
function deepEqual(a, b) {
      if (a === b) {
        return true;
      }
      if (a == null && typeof(a) !== 'object' || b == null && typeof(b) !== 'object') {
        return false;
      }

      var equal = true;
      for (var key in a) {
        if (typeof(a) === 'object' && typeof(b) === 'object') {
          if (!deepEqual(a[key], b[key])) {
            equal = false;
          }
        } else if (a !== b) {
          equal = false;
        }
      }
      return equal;

    }


    var obj = {
      here: {
        is: "an"
      },
      object: 2
    };



    alert(deepEqual(obj, {
      here: {
        is: "an"
      },
      object: 2
    }));



Почему когда я изменяю 'an' то функция показывает, что объекты не равны. А если меняю '2' на другое число, то функция всегда возвращает true

рони 02.05.2018 17:17

dakociha,
строку 2 выкинуть бы ...

dakociha 02.05.2018 17:19

Цитата:

Сообщение от рони (Сообщение 484516)
dakociha,
строку 2 выкинуть бы ...

крч нашел ошибку. строка 5 там не &&, а || должно быть

рони 02.05.2018 17:28

dakociha,
<script>
function deepEqual(a, b) {
      if (a === b) {
        return true;
      }
      if (a == null || typeof(a) !== 'object' || b == null && typeof(b) !== 'object') {
        return false;
      }

      var equal = true;
      for (var key in a) {
        if (typeof(a) === 'object' && typeof(b) === 'object') {
          if (!deepEqual(a[key], b[key])) {
            equal = false;
          }
        } else if (a !== b) {
          equal = false;
        }
      }
      return equal;

    }


    var obj = {
      here: {
        is: "an"
      },
      object: 2
    };



    alert(deepEqual(obj, {
      here: {
        is: "an"
      },
      object: 2,
      test : 5
    }));

  </script>

рони 02.05.2018 18:21

dakociha,
может чем поможет http://javascript.ru/forum/showthrea...057#post474909


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