递归的更新json对象,注意这里对数据是采用相加的操作
Object.map = function (obj, f) {
var result = {};
for (k in obj)
if ({}.hasOwnProperty.call(obj, k))
result[k] = f(k, obj[k]);
return result;
}
function merge(a, b, resolve) {
return Object.map(a, function (k, a_value) {
if (k in b)
return resolve(a_value, b[k]);
else
return a_value;
});
}
function recursive_merge(a, b, resolve) {
return merge(a, b, function (a_value, b_value) {
if (typeof a_value == 'object' && typeof b_value == 'object')
return recursive_merge(a_value, b_value, resolve);
else
return resolve(a_value, b_value);
});
}
result = recursive_merge(initial, update, function (a, b) {
return a + b;
})