Skip to content

Instantly share code, notes, and snippets.

@Akiyamka
Created January 30, 2020 12:01
Show Gist options
  • Save Akiyamka/8684839bff3b535925db9749a3d2df98 to your computer and use it in GitHub Desktop.
Save Akiyamka/8684839bff3b535925db9749a3d2df98 to your computer and use it in GitHub Desktop.
Safety merge objects
export default function safeMerge(obj1, obj2) {
const keys = Object.keys(obj2).concat(Object.keys(obj1));
const isInvalid = val => val === undefined || Number.isNaN(val) || val === null;
return keys.reduce((acc, key) => {
acc[key] = !isInvalid(obj2[key])
? obj2[key]
: obj1[key];
if (isInvalid(acc[key])) {
delete acc[key];
}
return acc;
}, {});
}
/**
* Examples:
*/
safeMerge(
{ foo: 'bar', fizz: 'buzz' },
{ magic: 'xyzzy', fizz: undefined, foo: null }
)
// { foo: 'bar', fizz: 'buzz', magic: 'xyzzy' }
safeMerge(
{ magic: 'xyzzy', foo: null },
{ fizz: 'buzz' }
)
// { magic: 'xyzzy', fizz: 'buzz' }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment