Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

对象的合并 #87

Open
Sunny-117 opened this issue Nov 3, 2022 · 5 comments
Open

对象的合并 #87

Sunny-117 opened this issue Nov 3, 2022 · 5 comments

Comments

@Sunny-117
Copy link
Owner

var obj1 = {
    a: 1,
    b: {
        c: 2,
        d: 3
    },
    e: 4,
    h: {
        i: 5
    }
}
var obj2 = {
    a: 111,
    b: {
        c: 222,
        f: 333
    },
    g: 444,
    h: 666
}
// 实现一个mergeObject(obj1, obj2)方法,得到下面的对象,并转化成JSON输出到#app
var obj = {
    a: 111,
    b: {
        c: 222,
        d: 3,
        f: 333
    },
    e: 4,
    g: 444,
    h: 666
}
@Banks1y
Copy link

Banks1y commented Jun 18, 2023

//
console.log(JSON.stringify(Object.assign(obj1, obj2)))
//不用Object.assign
function myAssign(obj, ...src) {
  for (let i = 0; i < src.length; i++) {
    if (src[i] !== null || src[i] !== undefined) {
      for (let index in src[i]) {
        if (src[i].hasOwnProperty(index)) {
          obj[index] = src[i][index];
        }
      }
    }
  }
  return obj;
}
console.log(JSON.stringify(myAssign(obj1, obj2)))

@lxq-mdc
Copy link

lxq-mdc commented Jul 25, 2023

这个mergeObject方法的主要逻辑是:

  1. 遍历obj1,将其属性复制到新对象obj
  2. 遍历obj2,如果key在obj1中不存在,直接复制该key及value到obj
  3. 如果key在两者中都存在,且value为对象,递归调用mergeObject进行合并

`

  function mergeObject(obj1, obj2) {
let obj = {};

for (let key in obj1) {
  if (typeof obj1[key] === 'object') {
    obj[key] = mergeObject(obj1[key], obj2[key]);
  } else {
    obj[key] = obj1[key]; 
  }
}

for (let key in obj2) {
  if (typeof obj2[key] === 'object') {
    obj[key] = mergeObject(obj1[key], obj2[key]);
  } else if (!obj.hasOwnProperty(key)) {
    obj[key] = obj2[key];
  }
}
return obj;}
 mergeObject(obj1, obj2);

`

@kangkang123269
Copy link

kangkang123269 commented Sep 3, 2023

function isObject(obj) {
    return Object.prototype.toString.call(obj) === '[object Object]';
}

function mergeObject(obj1, obj2) {
    let result = {...obj1};
    for (let key in obj2) {
        if (isObject(obj2[key]) && isObject(result[key])) {
            result[key] = mergeObject(result[key], obj2[key]);
        } else {
            result[key] = obj2[key];
        }
    }
    return result;
}

var obj1 = {
    a: 1,
    b: { c: 2, d: 3 },
    e: 4,
    h: { i: 5 }
};

var obj2 = {
   a: 111,
   b: { c:222, f :333 },
   g :444,
   h :666
};

var mergedObj = mergeObject(obj1, obj2);

// 将结果转化为JSON并输出到#app元素中
document.querySelector('#app').textContent = JSON.stringify(mergedObj, null, 4);

@seriouslym
Copy link

let mergeObject = function (obj1, obj2) {
    if (Object.prototype.toString.call(obj1) !== '[object Object]' || Object.prototype.toString.call(obj2) !== '[object Object]') {
        return obj2;
    }
    let res = {...obj1}
    for (let key of Object.keys(obj2)) {
        if (!(key in res)) {
            res[key] = obj2[key]
        } else {
            res[key] = mergeObject(res[key], obj2[key])
        }
    }
    return res;
}

@gswysy
Copy link

gswysy commented Mar 3, 2024

function merge(obj1, obj2) {
    let obj = {
        ...obj1
    }
    for (const key in obj2) {
        if (obj[key] && typeof obj[key] === 'object' && typeof obj2[key] === 'object') {
            obj[key] = merge(obj[key], obj2[key])
        } else {
            obj[key] = obj2[key]
        }
    }
    return obj
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants