如果一个对象的键值在另一个对象中存在,如何替换它们?

3
我正在寻找一种方法,如果已经存在于另一个对象中,就替换对象的键值,例如:
let objA = {
  x:"1",
  y:"2",
  z:"3"
};

let objB = {
  a:"4",
  z:"newValue",
  c:"6"
};

如果在objA中存在相同的键,则从objB获取值,结果应该类似于以下内容:

rsultObj = {
  x:"1",
  y:"2",
  z:"newValue"
}
3个回答

3
你可以使用Array.forEach()迭代objA的键,并替换在objB中找到的每个键的值。最初的回答:

const objA = { x: "1", y: "2", z: "3" };
const objB = { a: "4", z: "newValue", c: "6" };

Object.keys(objA).forEach(key => {
  if (key in objB) {
    objA[key] = objB[key];
  }
});

console.log(objA);


2

这个自定义的remix函数会创建一个新的对象,它拥有base所有键的键值,并且如果extra存在,则从extra获取值,否则从base获取。

function remix(base, extra) {
  const result = {};
  const has = {}.hasOwnProperty;
  for (let k in base) {
    if (has.call(extra, k)) { 
      result[k] = extra[k];
    } else if (has.call(base, k)) { 
      result[k] = base[k];
    }
  }
  return result;
}

您可以像这样使用该函数。
remix({x:1, y:2, z:3}, {a:4, z:"newValue", c:6});

它返回一个像这样的新对象。

{x:1, y:2, z:"newValue"}

1
这很完美,谢谢! - Rocket Reus

1

在单行中你可以写:

Object.keys(objA).filter(key => key in objB).forEach(key => objA[key] = objB[key]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接