两个对象之间的差异 - 减少

Difference between two Objects - reduce

我有 2 个对象,其数据重复但也不同。如何比较它们并找出差异?

const obj1 = {
  surname: "kowalski",
  name: "adam",
  age: 23,
  city: "Wroclaw",
  country: "Poland",
};

const obj2 = {
  name: "adam",
  age: 34,
  city: "Warszawa",
  country: "Poland",
  friend: "Ala",
};

const objCombined = { ...obj1, ...obj2 };

我必须使用 .reduce

我的作品:

const find = Object.entries(objCombined).reduce((diff, [key]) => {
  if (!obj2[key]) return diff;

  if (obj1[key] !== obj2[key]) diff[key] = obj2[key];

  return diff;
}, {});

但输出没有 surname: "kowalski"。 预期输出:

{surname: "kowalski", age: 34, city: "Warszawa", friend: "Ala"}

请使用此代码

const find = Object.entries(objCombined).reduce((diff, [key]) => {
  if (!obj2[key]) {
    diff[key] = obj1[key];
    return diff;
  }

  if (obj1[key] !== obj2[key]) diff[key] = obj2[key];

  return diff;
}, {});

删除 if (!obj2[key]) return diff 并添加 obj1[key]; 如果 obj2[key]; 未定义:

const obj1 = {
  surname: "kowalski",
  name: "adam",
  age: 23,
  city: "Wroclaw",
  country: "Poland",
};

const obj2 = {
  name: "adam",
  age: 34,
  city: "Warszawa",
  country: "Poland",
  friend: "Ala",
};

const objCombined = { ...obj1, ...obj2 };

const find = Object.entries(objCombined).reduce((diff, [key]) => {
//  if (!obj2[key]) return diff;

  if (obj1[key] !== obj2[key]) diff[key] = obj2[key] || obj1[key];

  return diff;
}, {});

console.log(find);

我们可以用Object.keys()Array.reduce()来得到两个对象的区别:

const obj1 = { surname: "kowalski", name: "adam", age: 23, city: "Wroclaw", country: "Poland", };
const obj2 = { name: "adam", age: 34, city: "Warszawa", country: "Poland", friend: "Ala", };

const diff = [...Object.keys(obj1), ...Object.keys(obj2)].reduce((acc, key) => { 
    if (obj1[key] !== obj2[key]) {
       acc[key] = obj2[key] || obj1[key];
    }
    return acc;
}, {})

console.log("Diff:", diff);