Skip to content

warrenday/mergeby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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
}]
*/

About

A utility function to immutably merge two object arrays

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published