2.0.1 • Published 4 years ago

mergeby v2.0.1

Weekly downloads
554
License
MIT
Repository
github
Last release
4 years ago

mergeby

A utility function to immutably merge two object arrays based on a matching key or a callback returning true

Installation

npm install mergeby

Usage

import mergeby from 'mergeby';

mergeby(array1, array2, 'name');

Arguments

  • array1 (Array) the array to merge into
  • array2 (Array|Object) the object or array to merge onto array1
  • keyOrCallback (String|Function) key to check against or function to return true
  • mergeDeep=false should merge nested objects

Returns

  • (Array) single array containing all merged objects

Examples

The properties of the second array are merged into the first, any items from the second array which do not match will be appended to the final array

const arr1 = [
  {
    name: 'john',
    age: 18,
    petsName: 'bruno',
  },
  {
    name: 'sam',
    age: 24,
  },
  {
    name: 'daisy',
    age: 28,
  },
];

const arr2 = [
  {
    name: 'john',
    age: 20,
    favouriteColour: 'red',
  },
  {
    name: 'sam',
    age: 26,
    favouriteColour: 'blue',
  },
  {
    name: 'daisy',
    age: 28,
  },
];

const result = mergeby(arr1, arr2, 'name');

/* Result
[{
    name: 'john',
    age: 20,
    petsName: 'bruno',
    favouriteColour: 'red'
}, {
    name: 'sam',
    age: 26,
    favouriteColour: 'blue'
}, {
    name: 'daisy',
    age: 28
}];
*/

Nested objects can also be merged by setting mergeDeep=true

const arr1 = [
  {
    name: 'john',
    age: 18,
    address: {
      line1: 'Stone Road',
      city: 'London',
      country: 'UK',
    },
  },
  {
    name: 'sam',
    age: 24,
  },
];

const arr2 = [
  {
    name: 'john',
    age: 18,
    address: {
      line2: 'Camden',
    },
  },
  {
    name: 'sam',
    age: 24,
  },
];

const result = mergeby(arr1, arr2, 'name', true);

/* Result
[{
    name: 'john',
    age: 18,
    address: {
        line1: 'Stone Road',
        line2: 'Camden',
        city: 'London',
        country: 'UK'
    }
}, {
    name: 'sam',
    age: 24
}]
*/

A comparator function can be passed instead

const arr1 = [{
    name: 'john',
    age: 18,
    address: {
        line1: 'Stone Road',
        city: 'London',
        country: 'UK'
    }
}, {
    name: 'sam',
    age: 24
}];

const arr2 = [{
    name: 'john',
    age: 18,
    address: {
        line2: 'Camden'
    }
}, {
    name: 'sam',
    age: 24
}];

const result = mergeby(arr1, arr2, (item1, item2) => {
    return item1.name === item2.name
}), true)

/* Result
[{
    name: 'john',
    age: 18,
    address: {
        line1: 'Stone Road',
        line2: 'Camden',
        city: 'London',
        country: 'UK'
    }
}, {
    name: 'sam',
    age: 24
}]
*/
2.0.1

4 years ago

2.0.0

4 years ago

1.1.0

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago