在 javascript 中合并两个对象

Merging two object in javascript

本文关键字:两个 对象 javascript 合并      更新时间:2023-09-26

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

法典:

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]};
      }
    }

你的解决方案是 O(m*n)。以下是 O(m+n):

var goals = {1:"first",2:"second"};
var pages = {1:"page1",2:"page2"};
var result = {};
for(var x in goals){
if(!result[x])result[x] = {};
result[x].goals = goals[x];
}
for(var x in pages){
if(!result[x])result[x] = {};
result[x]. page = pages[x];
}

使用下划线.js你会得到一个漂亮而简单的单行代码:

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

使用 obj.hasOwnProperty() .

当您执行for x in y时,它会为您提供对象的所有属性和方法。

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

扩展函数应如下所示:

function extend(src, dst){
    for(var key in dst)
        if(dst.hasOwnProperty(key))
            src[key] = dst[key];
    return src;