组合两个对象,但如果第一个对象已有属性,则忽略第二个对象中的属性

时间:2017-02-06 22:47:06

标签: javascript object

给定两个对象,"扩展"将第二个对象的属性添加到第一个对象。

注意:

  • 添加第一个对象中没有的任何键。
  • 如果第一个对象已经有给定键,则忽略它(不要覆盖属性值)。
  • 根本不要修改第二个对象。

    var obj1 = {
      a: 1,
      b: 2
    };
    var obj2 = {
      b: 4,
      c: 3
    };
    
    extend(obj1, obj2);
    
    console.log(obj1); // --> {a: 1, b: 2, c: 3}
    

我能够做到这一点:

function extend(obj1, obj2) {
  for (var key in obj2) {
    obj1[key] = obj2[key]; 
  }
 return obj1;
}

记录了:

{a: 1, b: 4, c: 3}

在我过去两天左右的时间里,我一直在试图解决这个问题。尝试使用谷歌搜索和一切。在此先感谢:)

1 个答案:

答案 0 :(得分:0)

基本上,您只需要迭代第二个对象上的每个键,看看第一个对象是否具有该键。

如您所知,迭代可以使用for..in loop完成。您缺少的部分是如何检查对象是否已具有给定属性。这是hasOwnProperty的用途。



function extend(obj1, obj2) {
  // Iterate over every (enumerable) key in obj2
  for (var key in obj2) {
    // If obj1 does not have a key by this name,
    // add it to obj1
    if (!obj1.hasOwnProperty(key)) {
      obj1[key] = obj2[key];
    }
  }
}

var obj1 = {
  a: 1,
  b: 2
};
var obj2 = {
  b: 4,
  c: 3
};

extend(obj1, obj2);
console.log(obj1); // --> {a: 1, b: 2, c: 3}