在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将如何使用您的代码