4.0.43 • Published 1 year ago

@corex/deepmerge v4.0.43

Weekly downloads
10,448
License
MIT
Repository
-
Last release
1 year ago

title: '@corex/deepmerge'

custom_edit_url: 'https://github.com/iamvishnusankar/corex/edit/master/packages/deepmerge/README.md'

A zero dependency object merger with typescript support and built in common merge utilities. Support merging of n number of objects

Installation

yarn add @corex/deepmerge

Usage

import { merge } from '@corex/deepmerge'

merge([obj1, obj2, obj3], { options })

Merge Options

propertydefaultdescription
arrayMergeTypecombineMerge two array by concatenation and remove duplicates. Available options are combine, overwrite
arrayMerge-Custom merge function to handle array merging.

Simple Object Merge

const obj1 = {
  a: 1,
  b: {
    c: 2,
  },
}

const obj2 = {
  a: 2,
  b: {
    c: 4,
    d: 5,
  },
}

const result = merge([obj1, obj2])
console.log(result)

// {
//   a: 2,
//   b: {
//     c: 4,
//     d: 5,
//   },
// }

Array Merge

const arr1 = {
  a: [1, 2, 3],
}
const arr2 = {
  a: [3, 4, 5],
}

const result = merge([arr1, arr2])
console.log(result)

// result = {
//   a: [1, 2, 3, 4, 5],
// }

Complex Merge

const obj1 = {
  a: 2,
  b: (x: number, y: number) => x + y,
  c: [1, 2, 4],
  d: {
    e: [4, 5, 7],
  },
}

console.log(obj1.b(7, 5)) // ==> 12

const obj2 = {
  a: 10,
  b: (x: number, y: number) => x / y,
  c: [20, 30],
  d: {
    e: [4, 7, 5],
    f: {
      g: 'another',
    },
  },
}

const obj3 = {
  b: (x: number, y: number) => x * y,
  c: [1, 2, 4],
  d: {
    e: [4, 7, 5],
  },
}

const result = merge([obj1, obj2, obj3])

console.log(result.b(7, 5)) // ==> 35

Array merge types

By default @corex/deepmerge uses combine merge. However user can implement their own methods to perform merge or use the built in overwrite.

Overwrite merge

const obj1 = {
  a: [1, 2, 3],
  b: ['c', 'd'],
  c: {
    d: [1, 2],
  },
}

const obj2 = {
  a: [1, 7, 6],
  b: ['e', 'f'],
  c: {
    d: [9, 10],
  },
}

const obj3 = {
  a: [20, 40],
}

const result = merge([obj1, obj2, obj3], {
  arrayMergeType: 'overwrite',
})
console.log(result)

// result = {
//   a: [20, 40],
//   b: ['e', 'f'],
//   c: {
//     d: [9, 10],
//   },
// }

Custom merge function

const obj1 = {
  a: ['1', '2'],
  c: {
    d: [1000, 500],
  },
}

const obj2 = {
  a: ['4', '5'],
  c: {
    d: [60, 80],
  },
}

const customMergeFn = (_: any[], __: any[]) => 42

const result = merge([obj1, obj2], {
  arrayMerge: customMergeFn,
})
console.log(result)

// {
//   a: 42,
//   c: {
//     d: 42,
//   },
// }
4.0.43

1 year ago

4.0.37

1 year ago

4.0.19

2 years ago

4.0.26

2 years ago

4.0.29

2 years ago

4.0.22

2 years ago

4.0.24

2 years ago

4.0.18

2 years ago

4.0.9

2 years ago

3.0.611

2 years ago

3.0.600

2 years ago

4.0.16

2 years ago

4.0.12

2 years ago

4.0.11

2 years ago

4.0.14

2 years ago

3.0.560

2 years ago

3.0.524

2 years ago

3.0.539

2 years ago

3.0.542

2 years ago

3.0.545

2 years ago

3.0.530

2 years ago

3.0.535

2 years ago

3.0.515

2 years ago

3.0.517

2 years ago

3.0.482

2 years ago

3.0.508

2 years ago

3.0.512

2 years ago

3.0.503

2 years ago

3.0.497

2 years ago

3.0.490

2 years ago

3.0.439

2 years ago

3.0.444

2 years ago

3.0.366

2 years ago

3.0.448

2 years ago

3.0.433

2 years ago

3.0.399

2 years ago

3.0.355

2 years ago

3.0.471

2 years ago

3.0.473

2 years ago

3.0.418

2 years ago

3.0.464

2 years ago

3.0.388

2 years ago

3.0.468

2 years ago

3.0.426

2 years ago

3.0.409

2 years ago

3.0.453

2 years ago

3.0.377

2 years ago

3.0.459

2 years ago

3.0.451

2 years ago

3.0.317

2 years ago

3.0.288

2 years ago

3.0.244

2 years ago

3.0.323

2 years ago

3.0.247

2 years ago

3.0.249

2 years ago

3.0.205

2 years ago

3.0.284

2 years ago

3.0.240

2 years ago

3.0.229

2 years ago

3.0.310

2 years ago

3.0.279

2 years ago

3.0.235

2 years ago

3.0.273

2 years ago

3.0.195

2 years ago

3.0.266

2 years ago

3.0.222

2 years ago

3.0.302

2 years ago

3.0.340

2 years ago

3.0.328

2 years ago

3.0.332

2 years ago

3.0.335

2 years ago

3.0.258

2 years ago

3.0.214

2 years ago

3.0.337

2 years ago

3.0.291

2 years ago

3.0.170

2 years ago

3.0.293

2 years ago

2.6.148

2 years ago

3.0.176

2 years ago

2.6.110

2 years ago

2.6.133

2 years ago

2.6.34

3 years ago

2.5.9

3 years ago

2.5.11

3 years ago

2.6.20

3 years ago

2.5.6

3 years ago

2.5.3

3 years ago

2.4.24

4 years ago

2.4.20

4 years ago

2.4.17

4 years ago

2.4.14

4 years ago

2.4.9

4 years ago

2.4.6

4 years ago

2.3.6

4 years ago

2.3.5

4 years ago

2.3.4

4 years ago

2.3.3

4 years ago

2.3.2

4 years ago

2.3.1

4 years ago

2.2.15

4 years ago

2.2.14

4 years ago

2.2.13

4 years ago

2.2.12

4 years ago

2.2.11

4 years ago

2.2.10

4 years ago

2.2.9

4 years ago

2.2.8

4 years ago

2.2.7

4 years ago

2.2.6

4 years ago

2.2.5

4 years ago