mattphillips / deep-object-diff

Deep diffs two objects, including nested structures of arrays and objects, and returns the difference. ❄️

Home Page:https://www.npmjs.com/package/deep-object-diff

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Also return original values for deleted and updated? Feature request.

seanonthenet opened this issue · comments

Hi Matt. Great package thanks.

Would you be able to create versions of deletedDiff, updatedDiff, detailedDiff or have them accept an optional shouldShowOriginal argument to also return the original values too? Eg:

const lhs = {
  foo: {
    bar: {
      a: ['a', 'b'],
      b: 2,
      c: ['x', 'y'],
      e: 100 // deleted
    }
  },
  buzz: 'world'
};

const rhs = {
  foo: {
    bar: {
      a: ['a'], // index 1 ('b')  deleted
      b: 2, // unchanged
      c: ['x', 'y', 'z'], // 'z' added
      d: 'Hello, world!' // added
    }
  },
  buzz: 'fizz' // updated
};

console.log(detailedDiff(lhs, rhs, true));

/*
{
  added: {
    foo: {
      bar: {
        c: {
          '2': 'z'
        },
        d: 'Hello, world!'
      }
    }
  },
  deleted: {
    foo: {
      bar: {
        a: {
          '1': undefined
        },
        e: undefined
      }
    }
  },
  deletedOriginal: {
    foo: {
      bar: {
        a: ['a', 'b'],
        e: 100
      }
    }
  },
  updated: {
    buzz: 'fizz'
  }
  updatedOriginal: {
    buzz: 'world'
  }
}
*/

Obviously just showing detailedDiff implementation but would be same for deletedDiff, updatedDiff.

Thanks.
Sean

@seanonthenet did you find a workaround or another package? I would like a similar feature. Thanks.

@guillett, @seanonthenet
as a dirty workaround:

let results = datailedDiff(oldItem, newItem);
results.deletedOriginal = deletedDiff(results.deleted, oldItem);
results.updatedOriginal = updatedDiff(results.updated, oldItem);