Проще всего через наследование. Просто кладете дефолтный объект в прототип и пихаете свои значения сверху.
Второй способ - рекурсивно.
//Тестовые данные
var defaults = {
test1: true,
test2: true,
test3: {
"test3.1": true,
"test3.2": true
}
};
var params = {
test2: false,
test3: {
"test3.2": false
}
};
//Сама маржилка
var result = (function (defaults, param) {
var obj = Object.create(defaults);
var merge = function (result, params) {
for (var key in params) {
if (params.hasOwnProperty(key)) {
if (key in result && typeof params[key] == "object" && typeof result[key] == "object") {
merge(result[key], params[key])
} else {
result[key] = params[key];
}
}
}
};
merge(obj, params);
return obj;
})(defaults, params);
//проверяем
alert(result.test1);
alert(result.test2);
alert(result.test3["test3.1"]);
alert(result.test3["test3.2"]);