主要作用是: 只要外部传入了key,不管该值是 ‘’ 或者 null 都会按照外部传入值,只有外部没有这个key才会用default的数据, 同时支持嵌套
/**
* When merging defaults and form data, we want to merge in this specific way:
* - objects are deeply merged
* - arrays are merged in such a way that:
* - when the array is set in form data, only array entries set in form data
* are deeply merged; additional entries from the defaults are ignored
* - when the array is not set in form data, the default is copied over
* - scalars are overwritten/set by form data
*/
function mergeDefaultsWithFormData(defaults, formData) {
if (Array.isArray(formData)) {
if (!Array.isArray(defaults)) {
defaults = [];
}
return formData.map((value, idx) => {
if (defaults[idx]) {
return mergeDefaultsWithFormData(defaults[idx], value);
}
return value;
});
} if (isObject(formData)) {
const acc = Object.assign({}, defaults); // Prevent mutation of source object.
return Object.keys(formData).reduce((preAcc, key) => {
preAcc[key] = mergeDefaultsWithFormData(
defaults ? defaults[key] : {},
formData[key]
);
return preAcc;
}, acc);
}
return formData;
}