poly-merge

1.0.2 • Public • Published

poly-merge

Forked from TehShrike/deepmerge.

Deep merge algorithms dont create any confusion except when it comes to merging arrays. There can be different expected behaviours when merging arrays.

This package provides reasonable out-of-the-box options for array merging, allong with regular object merging.

Concat

The default behaviour is to concatenate arrays.

const a = {
  a: { a: 1 },
  b: [
    { a: 1 },
    { a: 2 }
  ]
}

const b = {
  a: { b: 1 },
  b: [
    { a: 3 },
    { b: 1 }
  ]
}

merge(a,b)
>
{
  a: { a: 1, b: 1 },
  b: [
    { a: 1 },
    { a: 2 },
    { a: 3 },
    { b: 1 }
  ]
}

By Index

By index merges each element at the same index in arrays.

const a = {
  a: { a: 1 },
  b: [
    { a: 1 },
    { a: 2 }
  ]
}

const b = {
  a: { b: 1 },
  b: [
    { b: 3 },
    { b: 1 },
    { b: 4 }
  ]
}

merge(a,b, { arrayMerge: merge.BY_INDEX })
>
{
  a: { a: 1, b: 1 },
  b: [
    { a: 1, b: 3 },
    { a: 2, b: 1 },
    { b: 4 }
  ]
}

By Identifier

By identifier lets you provide an identifier extractor function. Elements with the same identifier are merged together.

const a = {
  a: { b: 1 },
  b: [
    {
      kind: 'one',
      a: 1
    },
    {
      kind: 'two',
      b: 1
    }
  ]
}

const b = {
  a: { a: 1 },
  b: [
    {
      kind: 'two',
      a: 2
    },
    {
      kind: 'one',
      b: 3
    }
  ]
}

merge(a,b, { arrayMerge: [merge.BY_IDENTIFIER, el => el.kind] })
>
{
  a: {
    b: 1,
    a: 1
  },
  b: [
    {
      kind: 'one',
      a: 1,
      b: 3
    },
    {
      kind: 'two',
      b: 1,
      a: 2
    }
  ]
}

Package Sidebar

Install

npm i poly-merge

Weekly Downloads

0

Version

1.0.2

License

MIT

Unpacked Size

31.3 kB

Total Files

10

Last publish

Collaborators

  • exifers