HardPro challengeJavaScriptTypeScript

JSON Patch Diff

ReactDiffAlgorithms

Compute a list of RFC-6902-like operations to transform from into to.
Both are flat objects with primitive values.

Operations:

  • { op: 'add', path, value } — key in to but not from.
  • { op: 'remove', path } — key in from but not to.
  • { op: 'replace', path, value } — key in both, value differs.

Path: '/' + key. Sort ops by path.

Sample tests

Test #1Replace one
Input: [{"a":1},{"a":2}]
Output: [{"op":"replace","path":"/a","value":2}]
Test #2Add key
Input: [{},{"x":1}]
Output: [{"op":"add","path":"/x","value":1}]
Test #3Remove key
Input: [{"x":1},{}]
Output: [{"op":"remove","path":"/x"}]
Test #4No diff
Input: [{"a":1,"b":2},{"a":1,"b":2}]
Output: []
Test #5All three op types
Input: [{"a":1,"b":2},{"b":3,"c":4}]
Output: [{"op":"remove","path":"/a"},{"op":"replace","path":"/b","value":3},{"op":"add","path":"/c","value":4}]