29 lines
678 B
JavaScript
29 lines
678 B
JavaScript
'use strict'
|
|
/*
|
|
Open Rowing Monitor, https://github.com/laberning/openrowingmonitor
|
|
|
|
Helper functions
|
|
*/
|
|
|
|
// deeply merges any number of objects into a new object
|
|
export function deepMerge (...objects) {
|
|
const isObject = obj => obj && typeof obj === 'object'
|
|
|
|
return objects.reduce((prev, obj) => {
|
|
Object.keys(obj).forEach(key => {
|
|
const pVal = prev[key]
|
|
const oVal = obj[key]
|
|
|
|
if (Array.isArray(pVal) && Array.isArray(oVal)) {
|
|
prev[key] = pVal.concat(...oVal)
|
|
} else if (isObject(pVal) && isObject(oVal)) {
|
|
prev[key] = deepMerge(pVal, oVal)
|
|
} else {
|
|
prev[key] = oVal
|
|
}
|
|
})
|
|
|
|
return prev
|
|
}, {})
|
|
}
|