比较两个对象,并返回唯一的数据

问题描述:

我有两个对象,我只想提取使用下划线js唯一的数据。比较两个对象,并返回唯一的数据

对象1(默认)

{ 
    players: "Players: ", 
    tableLimit: "Table Limits:", 
    newCardBtn: "Add New Card", 
    existingCard: "Use existing one", 
    contactUs: "Contact Us", 
    test: { 
     table: 'test' 
    } 
} 

对象2(改写)

{ 
    players: "Players: ", 
    tableLimit: "Table Limits:", 
    newCardBtn: "Add New Card", 
    existingCard: "Use existing one", 
    test: { 
     table: 'test' 
    } 
    } 

最终结果应当返回一个列表与从重写缺失数据。在我们的例子中,它应该返回contactUs: "Contact Us"

到现在我有这个,但它返回的默认对象中的所有数据,而无需自定义:

var def = { 
    players: "Players: ", 
    tableLimit: "Table Limits:", 
    newCardBtn: "Add New Card", 
    existingCard: "Use existing one", 
    contactUs: "Contact Us", 
    test: { 
     table: 'test' 
    } 
} 

var custom = { 
    players: "Players: ", 
    tableLimit: "Table Limits:", 
    newCardBtn: "Add New Card", 
    existingCard: "Use existing one", 
    test: { 
     table: 'test' 
    } 
} 

var out = JSON.stringify(Object.assign({}, def, custom)); 
fs.writeFile("./out.js", out); 
+0

我知道后提到不使用'underscore'。如果您只希望在**下划线**,请拒绝它并添加必要的信息。如果你对纯JS版本没有问题,请接受重复,以便其他人不能回答这个问题 – Rajesh

这将解析OBJ1,如果没有匹配的属性与匹配值obj2然后它被添加到obj3。你可以看到在输出的结果...

var obj1 = { 
 
    players: "Players: ", 
 
    tableLimit: "Table Limits:", 
 
    newCardBtn: "Add New Card", 
 
    existingCard: "Use existing one", 
 
    contactUs: "Contact Us", 
 
}; 
 

 
var obj2 = { 
 
    players: "Players: ", 
 
    tableLimit: "Table Limits:", 
 
    newCardBtn: "Add New Card", 
 
    existingCard: "Use existing one", 
 
}; 
 
    
 
var obj3 = (function() { 
 
    result = {}; 
 
    for (var k in obj1) { 
 
    if (obj2[k] != obj1[k]) { 
 
     result[k] = obj1[k]; 
 
    } 
 
    } 
 
    return result; 
 
})(); 
 

 
console.log(obj3);

+0

只是一个问题,如果你只是想给纯js中的一个函数带来变化,那么最好把它标为dupe。 – Rajesh

+0

@Rajesh尽管我同意你提出的作为重复的问题会给OP一个工作解决方案,但对于这个简单的场景来说,这也是巨大的矫枉过正。我的回答永远不会成为你提出的重复问题的有效工作,所以我认为这比你关联问题的答案更合适。我想如果你不需要更深入的比较,大多数人会喜欢这个代码的外观到链接。 – Archer

+1

同意你的观点,但我想这是事情变得灰暗的地方。你的答案适用于这种情况,在愚蠢的答案是更通用的。然而,对于初学者来说,你的答案会更有意义,但对于一位有经验的读者来说,这将会像复制内容一样,这可能会吸引低估。希望人们在选择他们的选票之前确实考虑了这种差异 – Rajesh