diff-by

Find changes in your array of objects.

Usage no npm install needed!

<script type="module">
  import diffBy from 'https://cdn.skypack.dev/diff-by';
</script>

README

diff-by

CircleCI npm version

Calculate changes in the array of objects.

Example

const fn = e => e.id

const oldDefinitions = [
  {
    id: 1,
    name: 'mathew',
    language: 'typescript',
  },
  {
    id: 2,
    name: 'joahim',
    language: 'elm',
  },
  {
    id: 3,
    name: 'georgio',
    language: 'javascript',
  },
]

const newDefinitions = [
  {
    id: 1,
    name: 'mathew',
    language: 'haskell',
  },
  {
    id: 2,
    name: 'joahim',
    language: 'elm',
  },
  {
    id: 4,
    name: 'stella',
    language: 'python',
  },
]

expect(diffBy(fn, oldDefinitions, newDefinitions)).toEqual({
  created: [
    {
      id: 4,
      name: 'stella',
      language: 'python',
    },
  ],
  updated: [
    {
      id: 1,
      name: 'mathew',
      language: 'haskell',
    },
  ],
  deleted: [
    {
      id: 3,
      name: 'georgio',
      language: 'javascript',
    },
  ],
  unchanged: [
    {
      id: 2,
      name: 'joahim',
      language: 'elm',
    },
  ],
})

API

/**
 *
 * Diffs array of objects considering the identifier function.
 *
 * @param fn
 * @param changed
 * @param current
 */
export default function diffBy<T, Y>(
  fn: (e: T) => Y,
  old: T[],
  current: T[],
): {
  created: T[]
  updated: T[]
  deleted: T[]
  unchanged: T[]
}

License

MIT @ Matic Zavadlal