import merge from './merge';
/**
* 递归合并 `source` 来源对象自身的可枚举属性(包含 `Symbol` 属性)到 `object` 目标对象。
*
* 与 `merge` 方法的区别:
*
* 1. 不合并数组,如果只传入 `2` 个参数,同 `merge(obj, src, merge.NOT_MERGE_ARRAYS)`
* 2. 不支持自定义赋值函数和获取对象键,但支持多个来源对象参数
*
* @alias module:Object.mergeObject
* @since 1.15.0
* @param {Object | Array} object 目标对象。
* @param {...object} args 来源对象。
* @returns 目标对象。
* @example
*
* mergeObject({c: 3}, {e: 5}); // { c: 3, e: 5 }
* mergeObject({ a: 1 }, { a: undefined, b: undefined }); // { a: 1, b: undefined }
* mergeObject({ a: 1 }, { a: undefined, b: undefined }, {c:'x'}); // { a: 1, b: undefined, c: 'x' }
*
* const source = {
* a: [{b: 2}, {d: 4}]
* }
* const otherSource = {
* a: [{c: 3},{e: 5}]
* }
* mergeObject({}, source, otherSource); // { a: [{c: 3}, {e: 5}] }
*/
const mergeObject = (object, source, ...args) => {
if (args.length > 0) {
const [arg1, ...restArgs] = args;
const obj = merge(object, source, merge.NOT_MERGE_ARRAYS);
return mergeObject(obj, arg1, ...restArgs);
}
return merge(object, source, merge.NOT_MERGE_ARRAYS);
};
export default mergeObject;