在javascript中合并两个对象

在javascript中合并两个对象,javascript,Javascript,我有以下代码来合并这两个对象 代码: var goals = {1:"first",2:"second"}; var pages = {1:"page1",2:"page2"}; var result = {}; for(var goal in goals){ for(var page in pages){ if(page.hasOwnProperty(goal)){ result[goal] = {"goal":goals[goal],"page":pa

我有以下代码来合并这两个对象

代码:

var goals = {1:"first",2:"second"};
var pages = {1:"page1",2:"page2"};

var result = {};

for(var goal in goals){
  for(var page in pages){
       if(page.hasOwnProperty(goal)){
         result[goal] = {"goal":goals[goal],"page":pages[page]};
      }
  }
}

console.log(result);
result = {1:{"goal":"first","page":"page1"},2:{"goal":"second","page":"page2"}};
预期结果:

var goals = {1:"first",2:"second"};
var pages = {1:"page1",2:"page2"};

var result = {};

for(var goal in goals){
  for(var page in pages){
       if(page.hasOwnProperty(goal)){
         result[goal] = {"goal":goals[goal],"page":pages[page]};
      }
  }
}

console.log(result);
result = {1:{"goal":"first","page":"page1"},2:{"goal":"second","page":"page2"}};
代码运行良好,并获得了预期的输出

任何改变它的建议,或者最好是这样做

改进的代码

    var result = {};

    for(var goal in goals){
     if(pages.hasOwnProperty(goal)){
        result[goal] = {"goal":goals[goal],"page":pages[goal]};
      }
    }

您需要使用
obj.hasOwnProperty()

当您对y中的x执行
操作时,它将为您提供对象的所有属性和方法

obj.hasOwnProperty()
告诉您属性是对象上的直接属性还是对象原型中的直接属性(如果返回false)

扩展函数应如下所示:

function extend(src, dst){
    for(var key in dst)
        if(dst.hasOwnProperty(key))
            src[key] = dst[key];
    return src;
你的解是O(m*n)。以下是O(m+n)的形式:


使用下划线.js,您可以得到一行简单的命令:

var result = _.extend(goals, pages);

@lukas.pukenis编辑了代码。现在是否正确?如果页面具有更多属性,则不会显示在输出中。这种情况会发生吗?谢谢大家的回答。我强烈建议下划线可以更有效、更完整:在一个对象上循环时,检查第二个对象中是否存在这些键。当然,在将属性添加到结果中后,如果属性确实存在,请删除它(参见我的答案)。您也没有过滤(
hasOwnProperty
)循环。这是多余的9/10案例,没错,但您永远不知道OP将如何使用您的代码