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

标签 javascript arrays javascript-objects

我有两个对象:

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

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

我需要在“需要”对象中查找是否至少有一个正匹配(真)与“有”对象。在这种情况下,它们在 b.c 中匹配,因为两者都是真的。

我应该如何面对这个问题?也许首先解析为一个数组?循环对象?

更新:

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

例子:

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

最佳答案

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

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

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

function objectsHaveMatch(obj1, obj2) {
  return Object.entries(obj1).some(([key, obj1Val]) => {
    if (!obj2[key]) return false;
    if (typeof obj1Val !== 'boolean') return objectsHaveMatch(obj1Val, obj2[key]);
    return obj1Val === true && obj2[key] === true;
	});
}

const atLeastOneMatch = objectsHaveMatch(have, need);
console.log(atLeastOneMatch);

也适用于更复杂的结构:

const have = {
  a: true,
  b: {
    c: false,
    d: true,
    foo: {
      q: false,
      w: false,
      e: false,
      r: {
        t: true
      }
    }
  }
};

const need = {
  a: false,
  b: {
    c: true,
    d: false,
    foo: {
      q: true,
      w: true,
      e: true,
      r: {
        t: false
      }
    }
  }
};

function objectsHaveMatch(obj1, obj2) {
  return Object.entries(obj1).some(([key, obj1Val]) => {
    if (!obj2[key]) return false;
    if (typeof obj1Val !== 'boolean') return objectsHaveMatch(obj1Val, obj2[key]);
    return obj1Val === true && obj2[key] === true;
	});
}

const atLeastOneMatch = objectsHaveMatch(have, need);
console.log(atLeastOneMatch);

缺少属性的片段示例:

const have = {
  a: true,
  b: {
    c: true,
    d: true,
    foo: {
      q: false,
      w: false,
      e: false,
      r: {
        t: true
      }
    }
  }
};

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

function objectsHaveMatch(obj1, obj2) {
  return Object.entries(obj1).some(([key, obj1Val]) => {
    if (!obj2[key]) return false;
    if (typeof obj1Val !== 'boolean') return objectsHaveMatch(obj1Val, obj2[key]);
    return obj1Val === true && obj2[key] === true;
	});
}

const atLeastOneMatch = objectsHaveMatch(have, need);
console.log(atLeastOneMatch);

关于javascript - 在单独的对象中查找匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50243826/

相关文章:

javascript - 为什么 "doScroll"在 IE8 中不起作用?

javascript - Ruby on Rails : Why doesn't my delete link work?

python - 类型错误 : object of type 'filter' has no len()

java - 我如何创建一个在 java 中同时接受 String[] 和 Integer[] 的方法而不重载方法?

javascript - esri new Portal(myUrl) 返回 dojo 错误 : CancelError "All requests canceled"

python - 如何有效地创建一个多维 numpy 数组,其条目仅取决于一维索引?

javascript - Javascript 中的数组到对象

javascript - 在 JavaScript 中比较两个对象数组是否存在重复对象并在不重复时推送它

javascript - 如何将匹配的属性值映射到同一个对象?

asp.net - UpdatePanel 内按钮的 OnClientClick 事件出现问题