您将如何检查一个对象中的 属性 个名称是否存在于另一个对象中?

How would you check if property name(s) from one object exist in another?

我正在尝试 transfer/copy 从 object1 到 object2 的属性,但只有 object2 中未定义的属性。

在此先感谢,我希望这能清楚地表达出来!

let object1 = { a: 1, b: 2, c: 3, d: 4 } 
let object2 = { a: 'string' }

fillObj = function (object2, object1) {
  for (let key in object1) {
    if (typeof object2.key === undefined) {
      object2[key] = object1[key];
    } 
  }
  return object2; //should return {a: 'string', b: 2, c: 3, d: 4 }
};

(1) 通过变量 属性 名称查看对象的属性,使用括号表示法,而不是点表示法

(2) 要检查某些内容是否未定义,可以直接与未定义进行比较,或者使用 typeof 并与 string 'undefined' 进行比较(但是此算法不需要此检查)

(3) 确保属性是自己的属性,而不是继承的属性,hasOwnProperty

let object1 = { a: 'string' } 
let object2 = { a: 1, b: 2, c: 3, d: 4 }

fillObj = function (object2, object1) {
  for (let key in object1) {
    if (object1.hasOwnProperty(key)) {
      object2[key] = object1[key];
    } 
  }
  return object2; //should return {a: 'string', b: 2, c: 3, d: 4 }
};

console.log(fillObj(object2, object1));

或使用 Object.entries,它仅迭代自有属性:

let object1 = { a: 'string' } 
let object2 = { a: 1, b: 2, c: 3, d: 4 }

fillObj = function (object2, object1) {
  for (const [key, val] of Object.entries(object1)) {
    object2[key] = val;
  }
  return object2; //should return {a: 'string', b: 2, c: 3, d: 4 }
};

console.log(fillObj(object2, object1));