Lodash : _.merge, _.assign
// Defined within your component
var defaultSettings = {
strictMode: true,
formatting: {
finalNewline: true,
quotes: 'double'
}
};
// Provided by the developer using your component
var userSettings = {
formatting: {
quotes: "single"
}
};
var mergedSettings = _.merge({}, defaultSettings, userSettings);
// {
// strictMode: true,
// formatting: {
// finalNewline: true,
// quotes: "single"
// }
// }
//Instead of assigning values as a whole,
//it recursively merges properties that don't hold the value undefined into the target object.
//Now, the formatting object hasn't been replaced by the partial user definition,
//but has had its default values merged with the user settings.
var assignedSettings = _.assign({}, defaultSettings, userSettings);
// {
// strictMode: true,
// formatting: {
// quotes: "single"
// }
// }
// The true value of finalNewline, another property of the formatting object, is now lost.