You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断两个JavaScript对象是否存在相同的键值对?

判断两个对象是否存在匹配的键值对

嘿,我来帮你搞定这个问题!你的需求是写一个函数,当两个JavaScript对象存在至少一组相同的键值对时返回true,对吧?咱们先看看现有代码的问题,再给出靠谱的实现:

现有代码的问题

你当前把对象转成JSON字符串的思路不太合适:因为对象的键在JSON序列化后的顺序可能不一致(虽然ES6+里对象键的顺序有规则,但依赖这个并不稳妥),而且这种方式没法精准检查单个键值对的匹配情况。

正确的函数实现

我们可以通过遍历对象的键,逐一检查对应的值是否相等来实现需求:

const hasMatchingKeyValuePair = function(obj1, obj2) {
  // 遍历第一个对象的所有自身属性键
  for (const key in obj1) {
    // 确保键是对象自身的,并且另一个对象有相同键且值相等
    if (obj1.hasOwnProperty(key) && obj2.hasOwnProperty(key) && obj2[key] === obj1[key]) {
      return true;
    }
  }
  // 遍历完所有键都没找到匹配,返回false
  return false;
};

代码解释

  • 用for...in遍历第一个对象的键,搭配hasOwnProperty可以避免遍历到原型链上的继承属性,保证只检查对象自身的键值对。
  • 每遍历一个键,就检查第二个对象是否拥有相同的键,并且两个对象该键对应的值严格相等(===)。
  • 一旦找到一组匹配的键值对,立刻返回true,不用继续遍历,提升效率。
  • 如果遍历完所有键都没找到匹配,就返回false。

测试你的示例

把你的示例对象代入函数测试,结果符合预期:

let obj1 = { toyota: 'yellow', honda: 'silver', mazda: 'black' };
let obj2 = { nissan: 'black', bmw: 'yellow', honda: 'silver' };

console.log(hasMatchingKeyValuePair(obj1, obj2)); // 输出:true

额外说明

如果你的对象值包含引用类型(比如嵌套对象、数组),===只会对比引用地址,这时候需要递归检查或者用深度对比的方法。如果你的场景里值都是字符串、数字这类基本类型,上面的代码就完全够用啦。

内容的提问来源于stack exchange,提问作者learningfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:12:41