JSON Compare - lodash

by Kesavamoorthi Subramanian

HTML

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<h3 id="result"></h3>

JavaScript

function isEqual (obj1, obj2)
{
  for (let key in obj1)
  {
    if (Array.isArray(obj1[key]) === true)
    {
      if (Array.isArray(obj2[key]) === false)
      {
      	return false;
      }

      if (_.differenceWith(obj1[key], obj2[key], _.isEqual).length > 0)
      {
      	return false;
      }
    }
  }
  
  if (_.isEqual(obj1, obj2) === false)
  {
  	return false;
  }
  
  return true;
}

var isArrayEqual = function (obj1, obj2)
{
	if (Array.isArray(obj1) === true && Array.isArray(obj2) === true)
  {
    if (_.differenceWith(obj1, obj2, _.isEqual).length === 0)
    {
      return true;
    }
  }
}

function isEqual2 (oldDataBlock, newDataBlock)
{
  if (typeof (oldDataBlock) !== typeof (newDataBlock))
  {
    return false;
  }

  if (typeof (oldDataBlock) !== 'object')
  {
    return oldDataBlock === newDataBlock;
  }

  if (Object.keys(oldDataBlock).length !== Object.keys(newDataBlock).length)
  {
    return false;
  }

  for (let key in oldDataBlock)
  {
    if (oldDataBlock.hasOwnProperty(key) !== newDataBlock.hasOwnProperty(key))
    {
      return false;
    }

    if (typeof (oldDataBlock[key]) !== typeof (newDataBlock[key]))
    {
      return false;
    }

    switch (typeof (oldDataBlock[key]))
    {
      case 'object':
        if (Array.isArray(oldDataBlock[key]) === false)
        {
          if (isEqual2(oldDataBlock[key], newDataBlock[key]) === false)
          {
            return false;
          }
        }
        else
        {
          if (Array.isArray(newDataBlock[key]) === false)
          {
            return false;
          }

          if (_.differenceWith(oldDataBlock[key], newDataBlock[key], _.isEqual).length > 0)
          {
            return false;
          }
        }
        break;

      default:
        if (oldDataBlock[key] !== newDataBlock[key])
        {
          return false;
        }
    }
  }

  return true;
}

function testObjectEquality ()
{
	var a = {
    "name": "John",
    "age": 30,
    "childs":...