Javascript 如何使用循环比较具有嵌套对象数组的两个对象

Javascript 如何使用循环比较具有嵌套对象数组的两个对象,javascript,arrays,ecmascript-6,javascript-objects,object-comparison,Javascript,Arrays,Ecmascript 6,Javascript Objects,Object Comparison,假设我有两个目标 A = { name:'abc', age: 20, areaOfInterest:[ { inSports:'badminton', outSports:'football' }, { inSports:'chess', outSports:'tennis' }] } B = { age: 20, name: 'abc', areaOfInterest:[ { inSports

假设我有两个目标

A = {
    name:'abc',
    age: 20,
    areaOfInterest:[
       { inSports:'badminton', outSports:'football' },
       { inSports:'chess', outSports:'tennis' }]
    }

B = {
    age: 20,
    name: 'abc',
    areaOfInterest:[
       { inSports:'chess', outSports:'tennis' },
       { inSports:'badminton', outSports:'football' }]
    }
如上面给定的示例所示,两个对象中的键序列不同。另外,在比较的时候,我不想和

if(A.name == B.name)
if(A.areOfInterest.inSports == B.areOfInterest.inSports)
我想使用类似于for…In或for…Of的循环来比较它们

这是我试过的

A={
姓名:'abc',
年龄:20,,
感兴趣的领域:[
{体育:羽毛球,体育:足球},
{体育:国际象棋,体育:网球}
]
}
B={
年龄:20,,
姓名:“abc”,
感兴趣的领域:[
{体育:国际象棋,体育:网球},
{体育:羽毛球,体育:足球}
]
}
功能objCompare(obj1、obj2){
for(Object.entries(obj1)的var[键,值]){
for(Object.entries(obj2))的变量[k,v]{
if(k==key&&v==value)
console.log(true)
}
}
}

log(objCompare(A,B))我会这样做:

A={
姓名:'abc',
年龄:20,,
感兴趣的领域:[
{体育:羽毛球,体育:足球},
{体育:国际象棋,体育:网球}
]
}
B={
年龄:'abc',
姓名:20,,
感兴趣的领域:[
{体育:国际象棋,体育:网球},
{体育:羽毛球,体育:足球}
]
}
C={
年龄:'abc',
姓名:20,,
感兴趣的领域:[
{体育:国际象棋,体育:网球},
{体育:羽毛球,体育:足球}
]
}
功能objCompare(obj1、obj2){
var=true;
for(Object.entries(obj1)的var[键,值]){
如果(值的类型==='object'){
相同=objCompare(obj1[key],obj2[key]);
}否则{
如果(obj1[key]!=obj2[key]),则相同=false;
}
}
返回相同的值;
}
log(objCompare(A,B));

log(objCompare(B,C))解决此问题的另一种方法是使用for object/array操作。代码不像递归解决方案那样简洁,但更具描述性

var A={
姓名:'abc',
年龄:20,,
感兴趣的领域:[
{体育:羽毛球,体育:网球},
{体育:国际象棋,体育:足球}
]
}
变量B={
年龄:20,,
姓名:“abc”,
感兴趣的领域:[
{体育:国际象棋,体育:网球},
{体育:羽毛球,体育:足球}
]
}
功能objCompare(obj1、obj2){
返回u0.isEqualWith(obj1,obj2,函数(v1,v2,键){
如果(键===未定义){
返回未定义;
}
如果(v1==v2){
返回true;
}
如果(u.isArray(v1)和&u.isArray(v2)){
if(u.isEmpty(u.differenceWith(v1,v2,u.isEqual))){
返回true;
}
}
返回false;
});
}
log(objCompare(A,B))

“两个对象中的键序列不同”仅在对象文字(即代码)中。你不应该期望对象键以任何特定的顺序排列,它们是无序的。好吧,我怎样才能比较这些对象呢?我试图遍历这两个对象,但没有得到正确的结果对象只与它们自己相等(使用
=
==
)。你只能直接比较原语,我遇到的问题是比较对象A,B中的嵌套数组。我确实尝试过使用typeof值,但没有在那里使用递归。我会尝试一下,让你知道。太棒了,递归在这方面很好。很乐意帮忙!递归岩石!:)我不熟悉lodash,谢谢你的评论。你让我想到了如何在洛达斯做到这一点。(Y) 此代码不起作用,关键参数是
undefined
,对于任何comparison@maxcnunes看起来lodash已经改变了
的行为。isEqualWith
。我已经编辑了答案。