mergeby
TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

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

Readme

Keywords

Package Sidebar

Install

npm i mergeby

Weekly Downloads

387

Version

2.0.1

License

MIT

Unpacked Size

29.4 kB

Total Files

14

Last publish

Collaborators

  • warrenjday