mergeObject.js

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;