mergeby
v2.0.1
Published
Merge object arrays based on a key or callback function
Downloads
856
Readme
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
}]
*/