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

JavaScript如何从对象数组中提取所有对象共有的键值对

实现方案

给定属性名完全一致的对象数组,要提取所有对象中值完全相同的公共键值对,可按以下逻辑实现:

  • 边界处理:传入空数组时直接返回空对象
  • 以数组第一个对象的键为遍历基准
  • 逐个校验每个键在所有对象中的值是否完全一致
  • 校验通过的键值对存入结果对象返回

示例输入

[
  {
    a: 'foo',
    b: 'bar',
    c: 'zip'
  },
  {
    a: 'urg',
    b: 'bar',
    c: 'zip'
  },
  {
    a: 'foo',
    b: 'bar',
    c: 'zip'
  }
]

示例输出

{
  b: 'bar',
  c: 'zip'
}

上述结果中键a因在不同对象中存在不同值被过滤,b、c在所有对象中值完全一致,因此保留。

完整代码

function getCommonPairs(arr) {
  if (arr.length === 0) return {};
  const res = {};
  // 取第一个对象的所有键做遍历
  const keys = Object.keys(arr[0]);
  for (const key of keys) {
    // 校验所有对象当前键的值是否和第一个对象对应值相等
    const isAllSame = arr.every(item => item[key] === arr[0][key]);
    if (isAllSame) {
      res[key] = arr[0][key];
    }
  }
  return res;
}

// 测试用例
const testArr = [
  {a: 'foo', b: 'bar', c: 'zip'},
  {a: 'urg', b: 'bar', c: 'zip'},
  {a: 'foo', b: 'bar', c: 'zip'}
];
console.log(getCommonPairs(testArr)); // 输出 {b: 'bar', c: 'zip'}

注意事项

  • 上述代码使用===做值比较,仅适用于属性值为原始类型(字符串、数字、布尔值、null、undefined)的场景。如果属性值存在引用类型(数组、普通对象),需要替换为深比较逻辑,避免因引用地址不同导致判断失效。
  • 本实现基于题目给出的「所有对象属性名完全一致」前提,如果实际场景中可能存在对象缺省属性的情况,可在校验逻辑中补充item.hasOwnProperty(key)判断,避免把缺键当作值相等处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:03:20