Object对象深度合并
支持Object和Array混合型对象遍历合并。
其中,
用到的对象类型判断方法,详见《JavaScript中Object对象类型判断》;
用到的对象深度遍历方法,详见《JavaScript中Object对象深度遍历》;
用到的对象深度赋值/取值方法,详见《JavaScript中Object对象深度赋值/取值》
// object 为源对象,合并后仍返回 object
// value 为要合并对象
// allowNull 为是否允许合并 null 属性,默认 false,value 中的 null 属性不会合并到 object,反之合并
export const objectMerge = (object, value, allowNull = false) => {
if (isUndefined(object) || object === null) return value;
objectMap(null, value, (o, obj, key, keyPath) => {
if (
!(isUndefined(obj) || (!allowNull && isNull(obj))) &&
(isString(key) || isNumber(key)) &&
keyPath.length
) {
const old = getPathValue(object, keyPath);
if (
isUndefined(old) ||
isReact(obj) ||
typeObject(old) !== typeObject(obj) ||
(!isObject(obj) &&
(!isArray(obj) || (isArray(obj) && obj.length === 0)))
) {
object = setPathValue(object, keyPath, obj);
return "continue";
}
}
});
return object;
};
示例:
const object = {aaa: "初始值"};
objectMerge(object, {aaa: null, bbb: "新赋值", ccc: "新赋值" }, true);