Javascript 在单独的对象中查找匹配值

Javascript 在单独的对象中查找匹配值,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有两个目标: const have = { a: true, b: { c: true, d: true } }; const need = { a: false, b: { c: true, d: false } }; 我需要在“需要”obj中查找,是否至少有一个与“have”obj正匹配(true)。在这种情况下,它们在不列颠哥伦比亚省匹配,因为两者都是真的 你知道我该怎么面对吗?也许先解析一个数组?循环obj 更新: “需要”对

我有两个目标:

const have = {
  a: true,
  b: {
    c: true,
    d: true
  }
};

const need = {
  a: false,
  b: {
    c: true,
    d: false
  }
};
我需要在“需要”obj中查找,是否至少有一个与“have”obj正匹配(true)。在这种情况下,它们在不列颠哥伦比亚省匹配,因为两者都是真的

你知道我该怎么面对吗?也许先解析一个数组?循环obj

更新:

“需要”对象并不总是包含所有相同的键。它可能会更少,但没有什么不同

例如:

const need = {
  b: {
    c: true,
  }
};

如果键和对象结构始终匹配,则可以对键/值执行递归检查:

const have={
a:是的,
b:{
c:是的,
d:是的
}
};
常数需要={
a:错,
b:{
c:是的,
d:错
}
};
功能对象匹配(obj1、obj2){
返回Object.entries(obj1).some([key,obj1Val])=>{
如果(!obj2[key])返回false;
if(typeof obj1Val!=“boolean”)返回objectsHaveMatch(obj1Val,obj2[key]);
返回obj1Val==true&&obj2[键]==true;
});
}
const atlestonematch=objectsHaveMatch(have,need);

console.log(atLeastOneMatch)与公认答案类似的方法,除了下面的方法针对OP的特定用例稍微优化了一点,假设数据是“模拟的”,比较的值是对象或“真实的”

const have={a:true,b:{c:true,d:true};
const need={b:{c:true};
常量hn=(h,n)=>/“have/need”迭代器
Object.keys(n).some(i=>//至少有一个truthy'need':
typeof n[i]=“object”&&hn(h[i],n[i])//对象上的递归
||n[i]&&n[i]==h[i]);//或者h&n都是平等的,真实的
常数has=hn(have,need);

console.log(has)
我在做完全相同的事情@MarianoZunino只需要一行更改:
如果(!obj2[key])返回false参见edit@CertainPerformance太神了工作得很有魅力。我将研究这种魔法是如何发挥作用的:)