2016-06-21 95 views
1

我有两个包含一些数组的JS对象。我想比较两个对象并创建第三个对象,其中包含仅对secondObj唯一的数组。比较包含数组的对象

他们看起来像这样:

firstObj : { 
    Jim_Array : [...], 
    Joe_Array : [...], 
    Bill_Array : [...] 
} 

secondObj : { 
    Bill_Array : [...], 
    Sam_Array : [...], 
    Kate_Array : [...], 
    Jim_Array : [...], 
    Joe_Array : [...] 
} 

我想比较两个对象,并具有下列结束:

thirdObj : { 
    Sam_Array : [...], 
    Kate_Array : [...] 
} 
+0

的([在JavaScript的阵列相交最简单的代码]可能的复制http://stackoverflow.com/questions/1885557/simplest -code-for-array-intersection-in-javascript) –

+0

上面的标志是我的错误。请忽略。 –

回答

2

你可以尝试像下面

var thirdObj = {}; 
for (var key in secondObj) { 
    if(!firstObj.hasOwnProperty(key)) { 
    // In case you need to compare the array additional check will come here 
    thirdObj[key] = secondObj[key]; 

    } 

} 

另一种方式

var thirdObj = {}; 
for (var key in secondObj) { 
    if(firstObj[key] === undefined) { 
    // In case you need to compare the array additional check will come here 
    thirdObj[key] = secondObj[key]; 

    } 

} 
+1

第一个选项与我正在处理的内容非常相似,但更好。谢谢,我感谢帮助。 – Daft

2

您可以使用Object.keys()reduce(),并检查firstObj是否具有secondObj的属性,如果没有添加到新对象,则为hasOwnProperty()

var firstObj = {Jim_Array : ['...'], Joe_Array : ['...'], Bill_Array : ['...']} 
 
var secondObj = {Bill_Array : ['...'], Sam_Array : ['...'], Kate_Array : ['...'], Jim_Array : ['...'], Joe_Array : ['...']} 
 

 
var result = Object.keys(secondObj).reduce(function(o, e) { 
 
    if(!firstObj.hasOwnProperty(e)) o[e] = secondObj[e]; 
 
    return o; 
 
}, {}); 
 

 
console.log(result)

1

的溶液用下划线:

var result = _.pick(secondObj, _.difference(_.keys(secondObj), _.keys(firstObj)));